2017-02-20 3 views

ответ

1

За документацию, type alias может относиться к себе в собственность, но не в другом месте на правой стороне декларации:

Мы можем также иметь псевдоним типа относятся к себе в в отеле

так что, как вы отметили, что это работает:

type Foo = { x: Foo } 

Однако, это не представляется возможным для псевдонима типа появляться где-либо на правой стороне декларации

Но это не удается:

type Foo = Bar<Foo> 
0

Ну, второй не может, даже если вы не используете ограничения:

type Bar<A> = { x: string } 
type Foo = Bar<Foo> // still fails with the same message 

В основном, его вторая форма должна быть таким:

type Bar = { x: Foo } 
type Foo = Bar; 

Чтобы быть эквивалентно первому один.

Кроме того, с strictNullChecks Я уверен, что нет такого способа инициализации такого типа.