TypeScript:筛选一个数字数组| undefined以只包括数字,不会被识别为数字数组



这是我的代码:

type TEntity = Array<{ size?: number }>
const someVar: TEntity =
//@ts-ignore
getFromSomewhere()
function isNumber(input: any): input is number {
return !isNaN(Number(input))
}
const sizes1: number[] = someVar.map(entity => entity.size).filter(size => Number.isInteger(size));
const sizes2: number[] = someVar.map(entity => entity.size).filter(size => isNumber(size));

我原以为sizessizes2在过滤后会自动成为number[]类型,但事实并非如此。将类型指定为: number[]也是一个错误。我也尝试了lodash的isNumber方法,但仍然没有成功。

我不想使用非null断言运算符(!(,因为我在逻辑上过滤所有内容,并且我有linter来防止使用非null声明。

如何获得我想要的正确类型?

以下是TS游乐场的链接:https://www.typescriptlang.org/play?#code/C4TwDgpgBAKgogO2AS1FAvFAggJxwQxAB4BvKAZ2QC8IB+ALigQFcBbAIwhygF8A+AFACAxgHsE5YBVGsIANXw5G8JKhAYBULVADOgALBYAWmQBzBKJwRN2sxGAAxHDIDKMiAHcAFlwgAKAEohADNmBGEUcShkcgA5Nk4cf2QEMGZgRnwEEEDGVPSpWKZErigSWy1rYGYcBCgAQli4-Dj-BI4uFLSMWOOCeITEJKUoacBGRhZOnABtAF0MaVkFHAA6VnwwhVNHQ+KF2UUDXRiEC1kOQAG2Au84xDjS12IBAh7ZP O+gG4ROJJBRqBByAAmKalOaLTDkDyrDZbHZ7dQHI5os5gy7XO4PMFPGLxGH+P6Bf5AA

在这种情况下,使用(size) : size is number将对您有所帮助。看看这个答案。

const sizes1: number[] = someVar.map(entity => entity.size).filter((size) : size is number => Number.isInteger(size));
const sizes2: number[] = someVar.map(entity => entity.size).filter((size) : size is number => isNumber(size));

最新更新