Comment gère-t-on le transtypage en TypeScript ou Javascript?
Disons que j'ai le code TypeScript suivant:
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";
}
}
}
où SymbolInfo
est une classe de base. Comment gérer le transtypage de caractères de SymbolInfo
à MarkerSymbolInfo
dans TypeScript ou Javascript?
Vous pouvez lancer comme ceci:
return this.createMarkerStyle(<MarkerSymbolInfo> symbolInfo);
Ou comme ceci si vous voulez être compatible avec le mode tsx:
return this.createMarkerStyle(symbolInfo as MarkerSymbolInfo);
Rappelez-vous simplement qu'il s'agit d'un casting au moment de la compilation et non d'un casting au moment de l'exécution.
Ceci s'appelle type assertion dans TypeScript, et depuis TypeScript 1.6, il y a deux façons de l'exprimer:
// Original syntax
var markerSymbolInfo = <MarkerSymbolInfo> symbolInfo;
// Newer additional syntax
var markerSymbolInfo = symbolInfo as MarkerSymbolInfo;
Les deux alternatives sont fonctionnellement identiques . La raison de l'introduction de la syntaxe as
- est que la syntaxe d'origine était en conflit avec JSX , voir la discussion sur la conception ici .
Si vous êtes en mesure de choisir, utilisez simplement la syntaxe avec laquelle vous vous sentez le plus à l'aise. Personnellement, je préfère la syntaxe as
-, car elle se sent plus à l'aise à lire et à écrire.