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
への型キャストを処理する方法を教えてください。
あなたはこのようにキャストすることができます:
return this.createMarkerStyle(<MarkerSymbolInfo> symbolInfo);
あなたがtsxモードと互換性を持ちたいなら、またはこれのように:
return this.createMarkerStyle(symbolInfo as MarkerSymbolInfo);
これはコンパイル時のキャストであり、ランタイムのキャストではないことを忘れないでください。
これはTypeScriptでは type assertion と呼ばれ、TypeScript 1.6以降、これを表現する方法は2つあります。
// Original syntax
var markerSymbolInfo = <MarkerSymbolInfo> symbolInfo;
// Newer additional syntax
var markerSymbolInfo = symbolInfo as MarkerSymbolInfo;
両方の選択肢は機能的に同一です。 as
-構文を導入した理由は、元の構文が JSX と競合したためです。設計の説明を参照してください ここ 。
あなたが選択する立場にあるならば、あなたがより快適に感じる構文を使うだけです。個人的にはas
-という構文が好きです。読み書きするのがより流暢だからです。