Quel est le mot réservé «type» dans TypeScript?

105

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é. Lors de la création de l'interface suivante, par exemple, «type» s'affiche 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 d'implémenter la propriété requise par l'interface, IntelliSense apparaît avec "type" ayant la même icône que d'autres mots-clés comme "typeof" ou "new ".

J'ai jeté un coup d'œil et j'ai pu trouver ce problème GitHub qui répertorie "type" comme un "mot réservé en mode strict" dans TypeScript, mais je n'ai pas trouvé d'autres informations sur son objectif réel.

Je soupçonne que j'ai un pet cérébral et c'est quelque chose d'évident que je devrais déjà savoir, mais à quoi sert le mot réservé «type» dans TypeScript?

Adam Goodwin
la source
Type Aliaspour donner à vos types un nom sémantique: basarat.gitbooks.io/typescript/content/docs/types/…
basarat

Réponses:

129

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 type», pages 46 et 47)

Mise à jour : maintenant sur la section 3.10 de la spécification 1.8 . Merci @RandallFlagg pour les spécifications et le lien mis à jour

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

Jcl
la source
24
Oui, c'était donc quelque chose d'évident. Il s'avère qu'il est assez difficile de trouver ce que vous cherchez lorsque vous recherchez le mot «type» dans le contexte des langages de programmation - en particulier lorsque le langage en question s'appelle «TypeScript». Au fait, les dictionnaires génériques n'existent toujours pas dans TypeScript, n'est-ce pas?
Adam Goodwin
1
En voici un si vous en avez besoin (pour TS 0.9 et supérieur):
Jcl
Merci, je pense avoir vu ce projet une fois auparavant alors que je voulais un dictionnaire, mais à la fin j'ai décidé de m'en passer.
Adam Goodwin
le concept est venu de typedef en ca vérifier cette studytonight.com/c/typedef.php
Pranoy Sarkar
32

Tapez le mot-clé dans le typographie:

En typographie, le mot-clé type définit un alias vers un type. Nous pouvons également utiliser le mot-clé type pour définir les types définis par l'utilisateur. Ceci est mieux expliqué par 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 les types de types scalaires ( string, number, etc.), mais aussi des valeurs littérales comme 1ou 'mystring'. Vous pouvez même composer des types d'autres types définis par l'utilisateur. Par exemple, le type madnesscontient les types randomet color.

Ensuite, lorsque nous essayons de rendre une chaîne littérale notre (et nous avons IntelliSense dans notre IDE), il affiche des suggestions:

entrez la description de l'image ici

Il montre toutes les couleurs, dont la folie de type dérive de la couleur de type, 'random' qui est dérivée de type random, et enfin, la chaîne 'foo'qui se trouve sur la folie de type lui-même.

Willem van der Veen
la source
Quelle est la différence entre les types définis par l'utilisateur et les énumérables
ORcoder
1
@ORcoder bonne question! Je veux savoir aussi. Une bonne explication à comprendre!
Merv du
où avez-vous déclaré les type color = "blue" | "red" | "yellow" | "purple";déclarations à l'intérieur ou à l'extérieur de la classe?
Lalit Kushwah