TypeScript或JavaScript类型转换

时间:2012-11-03 00:17:05

标签: casting typescript

如何在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是基类。如何在TypeScript或Javascript中处理从SymbolInfoMarkerSymbolInfo的类型转换?

3 个答案:

答案 0 :(得分:216)

你可以像这样投射:

return this.createMarkerStyle(<MarkerSymbolInfo> symbolInfo);

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

return this.createMarkerStyle(symbolInfo as MarkerSymbolInfo);

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

答案 1 :(得分:125)

这在TypeScript中称为type assertion,从TypeScript 1.6开始,有两种表达方式:

library(qdapTools)
 d1 <- mtabulate(setNames(strsplit(as.character(test$classes), "|", 
               fixed=T), test$fullurl))

两种选择功能相同。引入// Original syntax var markerSymbolInfo = <MarkerSymbolInfo> symbolInfo; // Newer additional syntax var markerSymbolInfo = symbolInfo as MarkerSymbolInfo; 语法的原因是原始语法与JSX冲突,请参阅设计讨论here

如果您可以选择,只需使用您感觉更舒服的语法。我个人更喜欢as - 语法,因为它更易于阅读和书写。

答案 2 :(得分:1)

在打字稿中,可以进行instanceof的if语句检入,您将可以使用Typed属性访问相同的变量。

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

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

使用相同的变量获取变量的实例,而无需将其重新分配给其他变量名,这是一个很好的小技巧。

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

TypeScript instanceofJavaScript instanceof