为什么这样做:
type Foo = { x: Foo }
但这并不是:
type Bar<A> = { x: A }
type Foo = Bar<Foo>
// ^^^ Type alias 'Foo' circularly references itself
它们不应该等同吗?
答案 0 :(得分:2)
根据文档,Define array inside template for handlebars/ember?可以在属性中引用自身,但不能在声明右侧的任何其他地方引用:
我们也可以在属性中使用类型别名引用自身
因此,正如您所指出的,这有效:
type Foo = { x: Foo }
但是,类型别名不可能出现在声明右侧的任何其他地方
但这失败了:
type Foo = Bar<Foo>
答案 1 :(得分:0)
好吧,即使您不使用约束,第二个也会失败:
type Bar<A> = { x: string }
type Foo = Bar<Foo> // still fails with the same message
基本上,第二种形式需要是这样的:
type Bar = { x: Foo }
type Foo = Bar;
等同于第一个。
另外,对于strictNullChecks
,我很确定无法初始化这种类型。