阅读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 :(得分:4)
这是“铸造”。基本上将以下内容({}
,一个没有字段的对象文字)解释为Square
。因此,由于使用它,TypeScript编译器将推断square
为Square
类型,而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