TypeScript或JavaScript类型转换

Kla*_*Nji 154 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";
        }              

    }
}
Run Code Online (Sandbox Code Playgroud)

哪里SymbolInfo是基类.如何从处理类型转换SymbolInfoMarkerSymbolInfo以打字稿或Javascript?

blo*_*ish 250

你可以这样投:

return this.createMarkerStyle(<MarkerSymbolInfo> symbolInfo);
Run Code Online (Sandbox Code Playgroud)

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

return this.createMarkerStyle(symbolInfo as MarkerSymbolInfo);
Run Code Online (Sandbox Code Playgroud)

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

  • 现在,我在doc中看到,在4.13节中称为Type Assertions. (8认同)
  • 它在JSX模式下不起作用.很伤心. (2认同)

Ale*_*lex 140

这在TypeScript中称为类型断言,从TypeScript 1.6开始,有两种表达方式:

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

// Newer additional syntax
var markerSymbolInfo = symbolInfo as MarkerSymbolInfo;
Run Code Online (Sandbox Code Playgroud)

两种选择在功能上都是相同的.引入as-syntax 的原因是原始语法与JSX冲突,请参见此处的设计讨论.

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

  • 您如何向打字稿表明您已将对象转换为另一种类型?例如,一个返回 type2 的 func,在它里面 http 获取类型 1,进行逻辑转换,并返回 type1 但现在是 type2 的内容? (3认同)
  • 基本上取一个属性并修改。我发现这样做的唯一方法是创建一个新的 var (type2) 并从 type1var 复制道具,然后返回它。您无法修改 type1 并返回,否则会出现“无法转换”错误。 (2认同)