TypeScript或JavaScript类型转换

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

假设我有以下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是基类。我如何处理类型转换从SymbolInfoMarkerSymbolInfo在TypeScript或Javascript?

407051 次浏览

你可以这样投:

return this.createMarkerStyle(<MarkerSymbolInfo> symbolInfo);

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

return this.createMarkerStyle(symbolInfo as MarkerSymbolInfo);

请记住,这是编译时强制转换,而不是运行时强制转换。

这在TypeScript中被称为类型的断言,从TypeScript 1.6开始,有两种方式来表示它:

// Original syntax
var markerSymbolInfo = <MarkerSymbolInfo> symbolInfo;


// Newer additional syntax
var markerSymbolInfo = symbolInfo as MarkerSymbolInfo;

两个选项都是功能相同的。引入__abc0语法的原因是原始语法与JSX冲突,请参阅设计讨论在这里

如果您可以选择,请使用您觉得更舒服的语法。我个人更喜欢__abc0语法,因为它的读写感觉更流畅。

在typescript中,可以在if语句中执行instanceof检查,并且可以访问具有Typed属性的相同变量。

因此,让我们说MarkerSymbolInfo上有一个名为marker的属性。您可以执行以下操作:

if (symbolInfo instanceof MarkerSymbol) {
// access .marker here
const marker = symbolInfo.marker
}

这是一个很好的小技巧,可以使用相同的变量来获得变量的实例,而不需要将其重新分配给不同的变量名。

查看这两个资源以获得更多信息:

< p > 打印稿instanceof, JavaScript实例 < / p >