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上复制