Qual è la parola riservata "tipo" in TypeScript?


105

Ho appena notato quando ho provato a creare un'interfaccia in TypeScript che "tipo" è una parola chiave o una parola riservata. Quando si crea la seguente interfaccia, ad esempio, "tipo" viene visualizzato in blu in Visual Studio 2013 con TypeScript 1.4:

interface IExampleInterface {
    type: string;
}

Supponiamo che tu provi a implementare l'interfaccia in una classe, come questa:

class ExampleClass implements IExampleInterface {
    public type: string;

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

Nella prima riga della classe, mentre digiti (scusa) la parola "tipo" per implementare la proprietà richiesta dall'interfaccia, IntelliSense appare con "tipo" avente la stessa icona di altre parole chiave come "tipo di" o "nuovo ".

Ho dato un'occhiata in giro e sono riuscito a trovare questo problema di GitHub che elenca "tipo" come una "parola riservata in modalità rigorosa" in TypeScript, ma non ho trovato ulteriori informazioni su quale sia effettivamente il suo scopo.

Sospetto di avere una scoreggia cerebrale e questo è qualcosa di ovvio che dovrei già sapere, ma a cosa serve la parola riservata "tipo" in TypeScript?


Type Aliasper dare ai tuoi tipi un nome semantico: basarat.gitbooks.io/typescript/content/docs/types/…
basarat

Risposte:


129

È usato per "alias di tipo". Per esempio:

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

Riferimento: specifica TypeScript v1.5 (sezione 3.9, "Alias ​​di tipo", pagine 46 e 47)

Aggiornamento : ora sulla sezione 3.10 della specifica 1.8 . Grazie @RandallFlagg per le specifiche e il collegamento aggiornati

Aggiornamento : Manuale TypeScript , la ricerca "Alias ​​di tipo" può portarti alla sezione corrispondente.


24
Sì, quindi era qualcosa di ovvio. Risulta che è piuttosto difficile trovare quello che stai cercando quando cerchi la parola "tipo" nel contesto dei linguaggi di programmazione, in particolare quando il linguaggio in questione si chiama "TypeScript". A proposito, i dizionari generici non esistono ancora in TypeScript, giusto?
Adam Goodwin

1
Eccone uno se ne hai bisogno (per TS 0.9 e versioni successive):
Jcl

Grazie, credo di aver visto quel progetto una volta prima quando volevo un dizionario, ma alla fine ho deciso di farne a meno.
Adam Goodwin

il concetto proviene da typedef in ca controlla questo studytonight.com/c/typedef.php
Pranoy Sarkar

31

Digita la parola chiave nel dattiloscritto:

Nel dattiloscritto la parola chiave type definisce un alias per un tipo. Possiamo anche usare la parola chiave type per definire i tipi definiti dall'utente. Questo è spiegato al meglio tramite un esempio:

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;

È possibile comporre i tipi di tipi scalari ( string, number, ecc), ma anche di valori letterali, come 1o 'mystring'. Puoi anche comporre tipi di altri tipi definiti dall'utente. Ad esempio, il tipo madnessha i tipi randome colorin esso.

Quindi, quando proviamo a rendere una stringa letterale nostra (e abbiamo IntelliSense nel nostro IDE) mostra suggerimenti:

inserisci qui la descrizione dell'immagine

Mostra tutti i colori, il cui tipo follia deriva dall'avere il tipo colore, 'casuale' che deriva dal tipo casuale e, infine, la stringa 'foo'che si trova sul tipo follia stesso.


Qual è la differenza tra i tipi definiti dall'utente e gli enumerabili
ORcoder

1
@ORcoder buona domanda! Voglio sapere anche io. Una buona spiegazione per farci capire!
Merv

dove hai dichiarato le type color = "blue" | "red" | "yellow" | "purple";dichiarazioni dentro o fuori la classe?
Lalit Kushwah
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.