这与带有严格null检查的打字稿有关。假设您有一个界面,例如:
interface Name {
firstName?: string;
lastName?: string;
}
您有一个Name[]
数组。
如何以打字稿将知道firstName
存在的方式过滤此数组?例如:
names.filter(name => !!name.firstName).map(name => {
// inside here, typescript still thinks name.firstName is possibly undefined
// but it should be aware that we have already filtered out elements with an
// undefined firstName
})
答案 0 :(得分:3)
filter
接受可以作为类型防护的函数。 Typescript不会推断函数的类型保护,但是您可以将返回类型显式定义为类型保护:
interface Name {
firstName?: string;
lastName?: string;
}
declare const names: Name[];
names
.filter((name): name is Name & { firstName: string } => !!name.firstName)
.map(name => {
name.firstName.big()
});
上面我们定义了name
参数为Name
,但是使用交集我们添加了firstName
是必需的。语法有点冗长,但可以。