web-dev-qa-db-ja.com

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は基本クラスです。 TypeScriptまたはJavascriptでSymbolInfoからMarkerSymbolInfoへの型キャストを処理する方法を教えてください。

141
Klaus Nji

あなたはこのようにキャストすることができます:

return this.createMarkerStyle(<MarkerSymbolInfo> symbolInfo);

あなたがtsxモードと互換性を持ちたいなら、またはこれのように:

return this.createMarkerStyle(symbolInfo as MarkerSymbolInfo);

これはコンパイル時のキャストであり、ランタイムのキャストではないことを忘れないでください。

221
blorkfish

これはTypeScriptでは type assertion と呼ばれ、TypeScript 1.6以降、これを表現する方法は2つあります。

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

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

両方の選択肢は機能的に同一ですas-構文を導入した理由は、元の構文が JSX と競合したためです。設計の説明を参照してください ここ

あなたが選択する立場にあるならば、あなたがより快適に感じる構文を使うだけです。個人的にはas-という構文が好きです。読み書きするのがより流暢だからです。

126
Alex