web-dev-qa-db-fra.com

TypeScript ou casting de type JavaScript

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";
        }              

    }
}

SymbolInfo est une classe de base. Comment gérer le transtypage de caractères de SymbolInfo à MarkerSymbolInfo dans TypeScript ou Javascript?

145
Klaus Nji

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.

232
blorkfish

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.

130
Alex