typescript - 递归嵌套数组类型:可以吗?
问题描述
我在 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 上查看此代码
如果您对发生了什么有任何了解,我希望您能得到一些见解。
解决方案
是的,递归类型是有限制的。它在第 5 级切断。
推荐阅读
- pytest - 知道为什么用 @pytest.mark.flaky(max_runs=...) 装饰的失败测试不会触发片状插件
- shell - 可以将 Jenkins 参数(变量)直接传递到 shell 脚本中吗?
- wordpress - WooCommerce 挂钩 - 产品更新提供变体对象而不是 ID
- python - 在pyhon中加载json时没有数据
- c - 我一直在我的 Mac 中使用 Visual Studio Code。当我尝试编译和运行程序时,它会弹出一条消息“权限被拒绝”
- java - 如何找到两个日期之间的小时差?
- python - 如何修复孪生错误“CRITICAL:root:twint.get:User:replace() argument 2 must be str, not None”
- apache-kafka - 分区重新平衡期间的 Kafka 行为
- javascript - 同名的变量和函数在块内返回错误
- sql - 查询选择不同登录的问题