考虑以下使用strictNullChecks
的代码:
var a: (number | null)[] = [0, 1, 2, 3, null, 4, 5, 6];
var b: { value: number; }[] = a.map(x => x != null && { value: x }).filter(Boolean);
由于以下原因,它无法编译:
Type '(false | { value: number; })[]' is not assignable to type '{ value: number; }[]'.
Type 'false | { value: number; }' is not assignable to type '{ value: number; }'.
Type 'false' is not assignable to type '{ value: number; }'.
但很明显,false
会被 .filter(Boolean)
过滤掉。
null
同理。
除了写成 as number[]
的方式,是否有其他办法标记值不包含 false
或 null
?