我用 TypeScript 编写了这段代码,并启用了严格模式。
const arr: ({ name?: string })[] = [
{ name: 'foo' },
{},
{ name: 'bar' }
]
function select(): string[] {
return arr
.filter(e => e.name !== undefined)
.map(e => e.name)
}
它无法编译并出现此错误:
Type '(string | undefined)[]' is not assignable to type 'string[]'.
Type 'string | undefined' is not assignable to type 'string'.
Type 'undefined' is not assignable to type 'string'.
这是为什么?不是所有具有属性的对象在被ped之前都name
被undefined
过滤掉了吗?map
如果我将select
函数的返回类型更改为(string | undefined)[]
,则编译成功。