typescript对象奇怪的类型语法

时间:2016-02-04 22:11:58

标签: javascript object syntax typescript

阅读TypeScript handbook时,我遇到了以下示例:

interface Shape {
    color: string;
}

interface Square extends Shape {
    sideLength: number;
}

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

问题是 - 实际上<Square>{}是什么?对我来说似乎是一种奇怪的语法。从Java / C#的角度来看,它就像一个匿名对象的泛型。究竟是什么以及这种创造的局限性是什么?

2 个答案:

答案 0 :(得分:4)

这是“铸造”。基本上将以下内容({},一个没有字段的对象文字)解释为Square。因此,由于使用它,TypeScript编译器将推断squareSquare类型,而Intellisense将显示正确的成员。

当然它并不是真正的“投射”,因为我们知道类型只是TypeScript中的错觉。这完全适用于编译器。

答案 1 :(得分:3)

它被称为类型断言https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html

你正在看的模式:

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

JS的常见(但不推荐) - &gt;用于延迟对象初始化的TS迁移:https://basarat.gitbooks.io/typescript/content/docs/tips/lazyObjectLiteralInitialization.html