typescript中array.filter的用法和ts中is的作用

interface A {
	a:number;
}
interface B {
	b:number;
}
type C = A|B;
const arr:C=[{a:1},{b:2},{b:1}];

当我要帅选出所有A类型数据时,用filter判断是否有a属性;

const filterArr=arr.filter(i=> i.hasOwnProperty('a'));

此时你会发现 ts的推导类型并没有改变,还是C [ ];
在这里插入图片描述
这时候点进去filter的ts定义:
在这里插入图片描述
可以看到filter是接受泛型的:泛型S受T约束;

此时我们传入类型A:

const filterArr=arr.filter<A>(i=> i.hasOwnProperty('a'));

可以看到一个"类型xxx必须为类型谓词"
在这里插入图片描述

这个时候就会疑惑 啥是类型谓词;

仔细看就是发现这里和我们想像的不一样:value is S是什么东西?不应该是boolean吗?
在这里插入图片描述
TypeScript 中的 is 关键字,它被称为类型谓词,用来判断一个变量属于某个接口或类型。

const isA = (i: C): i is A => {
  return i.hasOwnProperty('a');
};

在这里插入图片描述
此时就可以了,filter函数筛选类型时 要返回一个类型谓词;要不然ts是不知道你缩减了类型的;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值