首页 > 解决方案 > 递归嵌套数组类型:可以吗?

问题描述

我在 TypeScript 3.0.3 上,这按预期工作:

interface IndefiniteNestedArray<T> extends Array<T | IndefiniteNestedArray<T>> {}

let arr: IndefiniteNestedArray<string> = [ [ [ [9001] ] ] ]; // 4 levels
//
// type 'number[][][][]' is not assignable to type 'IndefiniteNestedArray<string>'.
//

但是由于某种原因,当我将它进一步嵌套一维时,类型错误就会消失......显然它不应该:

interface IndefiniteNestedArray<T> extends Array<T | IndefiniteNestedArray<T>> {}

let arr: IndefiniteNestedArray<string> = [ [ [ [ [9001] ] ] ] ]; // 5 levels
// all good!...????

所以要么我遇到了 Typescript 的设计限制,你只能创建 4 层深的递归类型数组,或者我做错了什么。

为了增加谜团(或者可能是一个线索?),当您重新分配这种类型的变量时,事情变得更加奇怪。在 TypeScript Playground 上查看此代码

如果您对发生了什么有任何了解,我希望您能得到一些见解。

标签: typescript

解决方案


是的,递归类型是有限制的。它在第 5 级切断。

https://youtu.be/hDACN-BGvI8?t=22m59s


推荐阅读