如何在 TypeScript 中对不同数组类型使用过滤器

Hel*_*rld 7 javascript typescript

给出的函数签名如下:

function foo(): string[] | number[]
Run Code Online (Sandbox Code Playgroud)

为什么TS会抱怨filter的follow函数调用?

foo().filter((v) => true);
      ^^^^^^
      Error
Run Code Online (Sandbox Code Playgroud)

该表达式不可调用。联合体类型的每个成员 '{ (谓词: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (谓词: (值: 数字, 索引: 数字, 数组: 数字[]) => 未知, thisArg?: 任意): 数字[]; } | { ...; }' 有签名,但这些签名都不相互兼容。

当然我可以将其转换为[],但是这里正确的方法是什么?错误信息很难理解?人们如何破译这一点呢?

示例:游乐场

Vul*_*tyn 5

function foo(): (number|string)[]
Run Code Online (Sandbox Code Playgroud)

出于与此处相同的原因: Typescript:如何映射联合数组类型?

  • 但这是不同的。就我而言,我要么返回 string[] 数组,要么返回 number[],但您的签名意味着它可以包含混合类型 (2认同)