是否有一种干净方便的方式来做类似的事情:
const x: (string|undefined)[] = ['aaa', undefined, 'ccc'];
const y = _.filter(x, it => !!it);
以便TypeScript将y
的类型识别为string[]
,而不必编写自己的函数进行过滤? (即,是否有一种方法可以使语言的特征变窄,例如将if
块应用于数组?)
答案 0 :(得分:4)
不确定在这里为什么需要lodash,但是可以:
const x: (string|undefined)[] = ['aaa', undefined, 'ccc'];
const y = x.filter((it): it is string => it !== undefined);
在这种情况下,y
被推断为类型string[]
。 !!it
也将被推断为类型string[]
,但具有从数组中滤除空字符串条目的副作用。