Typescript 正确键入Array.flat(无穷大)

Typescript 正确键入Array.flat(无穷大),typescript,flatten,Typescript,Flatten,我了解了这个新方法,并想用它来尝试一下,但返回的类型并不理想 const hello = [1, 2, [3], [[4]]] const x = hello.flat(Infinity) 这将x的类型设置为: const x: (number | number[] | number[][])[] 我怎么能把它变成number[]?我猜您一定是在使用测试版的TypeScript 3.9。这里的主要问题是TypeScript当前没有对应于无穷大的 对于添加此内容的开放式建议) 现在,Type

我了解了这个新方法,并想用它来尝试一下,但返回的类型并不理想

const hello = [1, 2, [3], [[4]]]

const x = hello.flat(Infinity)
这将
x
的类型设置为:

const x: (number | number[] | number[][])[]

我怎么能把它变成
number[]

我猜您一定是在使用测试版的TypeScript 3.9。这里的主要问题是TypeScript当前没有对应于
无穷大的
对于添加此内容的开放式建议)

现在,TypeScript中的
Infinity
类型只是
number
。因此编译器不知道
array.flat(无穷大)
将返回最平坦的数组;相反,它将其视为调用了
array.flat(num)
,其中
num
是一些
number
值表达式。这意味着它不知道最终阵列的平坦程度,并最终为您提供各种可能的平坦深度:

const z = [[[[[[0 as const]]]]]].flat(Infinity);
// const z: (0 | 0[] | 0[][] | 0[][][] | 0[][][][] | 0[][][][][])[]

flat()
的这个问题在下中有所说明,这个问题充当了数组方法用例的集合,而数组方法目前在TypeScript中的作用并不完美。如果你真的关心这一点,你可能想给它一个测试你是使用TS3.9测试版还是什么?我无法在3.8.3上复制