262 votes

TypeScript ou JavaScript type casting

Comment gérer le casting de type en TypeScript ou en 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 puis-je gérer le typecasting de SymbolInfo a MarkerSymbolInfo en TypeScript ou en Javascript ?

391voto

blorkfish Points 2107

Vous pouvez lancer comme ça :

return this.createMarkerStyle(<MarkerSymbolInfo> symbolInfo);

Ou comme ceci si vous voulez être compatible avec le mode tsx :

return this.createMarkerStyle(symbolInfo as MarkerSymbolInfo);

N'oubliez pas qu'il s'agit d'un moulage au moment de la compilation, et non au moment de l'exécution.

226voto

Alex Points 149

C'est ce qu'on appelle affirmation de type en TypeScript, et depuis TypeScript 1.6, il existe 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 as -est que la syntaxe originale entre 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 as -syntaxe car elle est plus fluide à lire et à écrire.

4voto

Sanity1123 Points 505

Dans le script, il est possible de faire un instanceof dans une instruction if et vous aurez accès à la même variable avec l'instruction Typed propriétés.

Disons que MarkerSymbolInfo a une propriété appelée marker . Vous pouvez effectuer les opérations suivantes :

if (symbolInfo instanceof MarkerSymbol) {
    // access .marker here
    const marker = symbolInfo.marker
}

C'est un petit truc sympa pour obtenir l'instance d'une variable en utilisant la même variable sans avoir besoin de la réaffecter à un nom de variable différent.

Consultez ces deux ressources pour plus d'informations :

TypeScript instanceof & JavaScript instanceof

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X