web-dev-qa-db-fra.com

Qu'est-ce que le "type" réservé Word dans TypeScript?

Je viens de remarquer en essayant de créer une interface dans TypeScript que "type" est soit un mot clé, soit un mot réservé. Par exemple, lors de la création de l'interface suivante, "type" apparaît en bleu dans Visual Studio 2013 avec TypeScript 1.4:

interface IExampleInterface {
    type: string;
}

Disons que vous essayez ensuite d'implémenter l'interface dans une classe, comme ceci:

class ExampleClass implements IExampleInterface {
    public type: string;

    constructor() {
        this.type = "Example";
    }
}

Dans la première ligne de la classe, lorsque vous tapez (désolé) le mot "type" afin de mettre en oeuvre la propriété requise par l'interface, IntelliSense apparaît avec "type" ayant la même icône que d'autres mots clés tels que "typeof" ou "new ".

J'ai jeté un coup d'œil autour de moi et j'ai pu trouver ceci numéro de GitHub qui répertorie "type" en tant que "mot réservé en mode strict" dans TypeScript, mais je n'ai pas trouvé d'informations supplémentaires sur son objectif est.

Je soupçonne que je suis en train de péter le cerveau. C’est une chose évidente que je devrais déjà savoir, mais à quoi sert le mot "type" réservé Word dans TypeScript?

76
Adam Goodwin

Il est utilisé pour les "alias de type". Par exemple:

type StringOrNumber = string | number;
type DictionaryOfStringAndPerson = Dictionary<string, Person>;

Référence: Spécification TypeScript v1.5 (section 3.9, "Alias ​​de types", pages 46 et 47)

Mise à jour : À présent, section 3.10 de la spécification 1.8 . Merci @RandallFlagg pour les spécifications et le lien mis à jour

Mise à jour : TypeScript Handbook , la recherche "Alias ​​de type" peut vous amener à la section correspondante.

94
Jcl

Tapez le mot-clé dans TypeScript:

Dans TypeScript, le mot-clé type définit un alias pour un type. Nous pouvons également utiliser le mot-clé type pour définir les types définis par l'utilisateur. Ceci est mieux expliqué via un exemple:

type Age = number | string;    // pipe means number OR string
type color = "blue" | "red" | "yellow" | "purple";
type random = 1 | 2 | 'random' | boolean;

// random and color refer to user defined types, so type madness can contain anything which
// within these types + the number value 3 and string value 'foo'
type madness = random | 3 | 'foo' | color;  

type error = Error | null;
type callBack = (err: error, res: color) => random;

Vous pouvez composer des types de types scalaires (string, number, etc.), mais aussi des valeurs littérales comme 1 ou 'mystring'. Vous pouvez même composer des types d'autres types définis par l'utilisateur. Par exemple, tapez madness qui contient les types random et color.

Ensuite, lorsque nous essayons de faire un littéral de chaîne notre (et nous avons une intelliscence dans notre IDE), il affiche des suggestions:

enter image description here

Il montre toutes les couleurs, quel type de folie provient du type couleur, 'random' qui est dérivé du type random, et enfin la chaîne 'foo' qui est sur le type folie elle-même.

15