我正在尝试从数组中过滤掉未定义的值,但无法使编译器正确推断结果类型。我知道我可以使用类型断言,但更愿意理解如何正确键入我的回调以实现此结果。
const isDefinedNum = (x: number | undefined, _i: number, _a: ReadonlyArray<number | undefined>): x is number => x !== undefined;
const a: (number | undefined)[] = [1, undefined, 2, undefined];
const b = a.filter(isDefinedNum);
在上文中,b
的类型为(number | undefined)[]
。我正在尝试让编译器使用lib.d.ts
中的以下类型来统一调用:
filter<S extends T>(callbackfn: (this: void, value: T, index: number, array: ReadonlyArray<T>) => value is S): S[];