类型别名循环引用自身

时间:2017-02-20 19:33:10

标签: typescript

为什么这样做:

type Foo = { x: Foo }

但这并不是:

type Bar<A> = { x: A }
type Foo = Bar<Foo>
//   ^^^ Type alias 'Foo' circularly references itself

它们不应该等同吗?

2 个答案:

答案 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,我很确定无法初始化这种类型。