TS对filter结果类型推断似乎不正确?

如下:数组filter推断的结果依赖带上number,对比了下map是没有问题的

大家看看为啥这样?

image.png

code:

// 
const arr: string[] = ['0', 1, 2].filter(item => {
    return typeof item === 'string'
})
const arr1: string[] = ['0', 1, 2].map(item => {
    return item.toString()
})
阅读 5.5k
1 个回答

因为实际上是:

['0', 1, 2].filter((item: string | number) => {
    return typeof item === 'string'; // 并不改变 item 的类型,只决定是否过滤掉
})

所以返回类型也是 Array<string | number>

你可以类型断言一下:

const arr = ['0', 1, 2].filter(item: string => {
    return typeof item === 'string';
}) as string[];
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题