为什么这样做:
type Foo = { x: Foo }
Run Code Online (Sandbox Code Playgroud)
但这不是:
type Bar<A> = { x: A }
type Foo = Bar<Foo>
// ^^^ Type alias 'Foo' circularly references itself
Run Code Online (Sandbox Code Playgroud)
它们不应该是等价的吗?
好吧,即使您不使用约束,第二个也会失败:
type Bar<A> = { x: string }
type Foo = Bar<Foo> // still fails with the same message
Run Code Online (Sandbox Code Playgroud)
基本上,第二种形式需要是这样的:
type Bar = { x: Foo }
type Foo = Bar;
Run Code Online (Sandbox Code Playgroud)
相当于第一个。
另外,strictNullChecks我很确定没有办法初始化这样的类型。
根据文档,类型别名可以在属性中引用自身,但不能在声明右侧的任何其他地方引用:
我们还可以在属性中使用类型别名来引用自身
所以,正如你所指出的,这有效:
type Foo = { x: Foo }
Run Code Online (Sandbox Code Playgroud)
但是,类型别名不可能出现在声明右侧的其他任何地方
但这失败了:
type Foo = Bar<Foo>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6369 次 |
| 最近记录: |