我有以下代码:

type Document = number | string | Array<Document>;

TypeScript出现以下错误:

test.ts(7,6): error TS2456: Type alias 'Document' circularly references itself.

显然,循环引用是不允许的.然而,我仍然需要这种 struct .解决这个问题的方法是什么?

推荐答案

TypeScript的创建者解释了如何创建递归类型here.

循环引用的解决方法是使用extends Array.在您的情况下,这将导致以下解决方案:

type Document = number | string | DocumentArray;

interface DocumentArray extends Array<Document> { }

Update (TypeScript 3.7)

从TypeScript 3.7开始,将允许使用递归类型别名,不再需要解决方法.见:https://github.com/microsoft/TypeScript/pull/33050

Typescript相关问答推荐

如何将函数类型应用到生成器?

TypScript在对象上强制执行值类型时推断对象文字类型?

typescript抱怨值可以是未定义的,尽管类型没有定义

基于平台的重定向,Angular 为16

如何将类型从变量参数转换为返回中的不同形状?

Angular 信号:当输入信号改变值时,S触发取数的正确方式是什么?

TypeScrip-将<;A、B、C和>之一转换为联合A|B|C

TypeScrip 5.3和5.4-对`Readonly<;[...number[],字符串]>;`的测试版处理:有什么变化?

为什么有条件渲染会导致material 自动完成中出现奇怪的动画?

TypeScrip省略了类型参数,仅当传递另一个前面的类型参数时才采用默认类型

react 路由Use RouteLoaderData类型脚本错误

使用KeyOf和Never的循环引用

React router 6(数据路由)使用数据重定向

避免混淆两种不同的ID类型

带投掷的收窄类型

我可以使用JsDocs来澄清Typescript实用程序类型吗?

换行TypeScript';s具有泛型类型的推断数据类型

Typescript 从泛型推断类型

使用 fp-ts 时如何使用 TypeScript 序列化任务执行?

我是否应该在 Next.js 中的服务器组件中获取秘密数据的所有函数中使用使用服务器?