2016-02-04 4 views
1

При чтении TypeScript handbook, я наткнулся на следующий пример:машинопись объекта странного типа синтаксис

interface Shape { 
    color: string; 
} 

interface Square extends Shape { 
    sideLength: number; 
} 

var square = <Square>{}; 
square.color = "blue"; 
square.sideLength = 10; 

Вопрос в том - что на самом деле <Square>{}? Мне кажется странным синтаксисом. С точки зрения Java/C# это похоже на общий анонимный объект. Что именно это и каковы ограничения такого творения?

+0

Это похоже на литой – SLaks

ответ

3

Его называют утверждение типа https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html

и шаблонным вы смотрите на:

var square = <Square>{}; 
square.color = "blue"; 
square.sideLength = 10; 

Является распространенным (но не рекомендуется) для JS -> TS миграции для отложенной инициализации объекта: https://basarat.gitbooks.io/typescript/content/docs/tips/lazyObjectLiteralInitialization.html

+0

omg, даже такая вещь покрыта вашей книгой! Стоит ли читать официальное руководство TS или я просто перейду к вашей книге :)? – ducin

4

Это «литье». Интерпретируйте следующее ({}, объект буквально без полей) как Square в основном. Поэтому из-за использования этого метода square будет считаться типом Square компилятором TypeScript, а Intellisense отобразит правильные члены.

Конечно, это не настоящая «кастинг», так как мы знаем, что типы - это просто иллюзия в TypeScript. Это все для компилятора.

Смежные вопросы