Typescript 使用以下代码引发错误:
type AndType<AstT> = { type: 'And', args: [AstT] };
type TrueType = { type: 'True' };
type BaseAST = AndType<BaseAST> | TrueType;
Run Code Online (Sandbox Code Playgroud)
抱怨Type alias 'BaseAST' circularly references itself.;但是,如果我将循环引用包装在一个对象中,则这些类型可以正常编译:
type AndType<AstT> = { type: 'And', args: [AstT] };
type TrueType = { type: 'True' };
type BaseAST = {value: AndType<BaseAST>} | {value: TrueType};
Run Code Online (Sandbox Code Playgroud)
为什么?有没有人参考定义此行为的文档?
小智 1
对于您的情况,最简单的解决方案是将AndType类型设置为接口,如下所示:
interface AndType<AstT> {
type: 'And';
args: [AstT];
}
type TrueType = { type: 'True' };
type BaseAST = AndType<BaseAST> | TrueType;
Run Code Online (Sandbox Code Playgroud)
一般来说,建议使用简单类型的接口,但这并不总是可行。已经给出的链接应该为您提供更深入的信息。
| 归档时间: |
|
| 查看次数: |
30 次 |
| 最近记录: |