TypeScript或JavaScripttypes转换

如何在TypeScript或Javascript中处理types转换?

说我有以下的TypeScript代码:

module Symbology { export class SymbolFactory { createStyle( symbolInfo : SymbolInfo) : any { if (symbolInfo == null) { return null; } if (symbolInfo.symbolShapeType === "marker") { // how to cast to MarkerSymbolInfo return this.createMarkerStyle((MarkerSymbolInfo) symbolInfo); } } createMarkerStyle(markerSymbol : MarkerSymbolInfo ): any { throw "createMarkerStyle not implemented"; } } } 

SymbolInfo是一个基类。 在TypeScript或Javascript中如何处理从SymbolInfoMarkerSymbolInfotypes转换?

你可以像这样施放:

 return this.createMarkerStyle(<MarkerSymbolInfo> symbolInfo); 

或者像这样,如果你想与tsx模式兼容:

 return this.createMarkerStyle(symbolInfo as MarkerSymbolInfo); 

只要记住,这是一个编译时间转换,而不是一个运行时间转换。

这在TypeScript中被称为types断言 ,自从TypeScript 1.6以来,有两种expression方式:

 // Original syntax var markerSymbolInfo = <MarkerSymbolInfo> symbolInfo; // Newer additional syntax var markerSymbolInfo = symbolInfo as MarkerSymbolInfo; 

两种select在function上是相同的 。 引入as -syntax的原因是原始语法与JSX冲突,请参阅此处的devise讨论。

如果您可以select,只需使用您感觉更舒适的语法即可。 我个人比较喜欢as asntax,因为它读写更stream畅。