Was ist das reservierte Wort "Typ" in TypeScript?

104

Ich habe gerade beim Versuch, eine Schnittstelle in TypeScript zu erstellen, festgestellt, dass "type" entweder ein Schlüsselwort oder ein reserviertes Wort ist. Wenn Sie beispielsweise die folgende Benutzeroberfläche erstellen, wird "Typ" in Visual Studio 2013 mit TypeScript 1.4 blau angezeigt:

interface IExampleInterface {
    type: string;
}

Angenommen, Sie versuchen dann, die Schnittstelle in einer Klasse wie folgt zu implementieren:

class ExampleClass implements IExampleInterface {
    public type: string;

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

Wenn Sie in der ersten Zeile der Klasse das Wort "Typ" eingeben (Entschuldigung), um die für die Schnittstelle erforderliche Eigenschaft zu implementieren, wird IntelliSense mit "Typ" angezeigt, das dasselbe Symbol wie andere Schlüsselwörter wie "Typ" oder "Neu" hat ".

Ich habe mich umgesehen und konnte dieses GitHub-Problem finden, in dem "type" als "reserviertes Wort im strengen Modus" in TypeScript aufgeführt ist, aber ich habe keine weiteren Informationen darüber gefunden, wozu es eigentlich dient.

Ich vermute, ich habe einen Hirnfurz und das ist etwas Offensichtliches, das ich bereits wissen sollte, aber wofür ist das reservierte Wort "Typ" in TypeScript?

Adam Goodwin
quelle
Type AliasUm Ihren Typen einen semantischen Namen zu geben: basarat.gitbooks.io/typescript/content/docs/types/…
basarat

Antworten:

128

Es wird für "Typ-Aliase" verwendet. Beispielsweise:

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

Referenz: TypeScript Specification v1.5 (Abschnitt 3.9, "Type Aliases", Seiten 46 und 47)

Update : Jetzt zu Abschnitt 3.10 der 1.8-Spezifikation . Vielen Dank an @RandallFlagg für die aktualisierte Spezifikation und den Link

Update : TypeScript Handbook , Suche "Type Aliases" kann Sie zum entsprechenden Abschnitt führen.

Jcl
quelle
24
Ja, also war es etwas Offensichtliches. Es stellt sich heraus, dass es ziemlich schwierig ist, das zu finden, wonach Sie suchen, wenn Sie im Kontext von Programmiersprachen nach dem Wort "Typ" suchen - insbesondere, wenn die betreffende Sprache "TypeScript" heißt. Übrigens gibt es in TypeScript noch keine generischen Wörterbücher, oder?
Adam Goodwin
1
Hier ist eine, wenn Sie es brauchen (für TS 0.9 und höher):
Jcl
Danke, ich glaube, ich habe dieses Projekt schon einmal gesehen, als ich ein Wörterbuch wollte, aber am Ende habe ich mich entschieden, einfach darauf zu verzichten.
Adam Goodwin
Das Konzept stammt von typedef in ca check this studytonight.com/c/typedef.php
Pranoy Sarkar
31

Geben Sie das Schlüsselwort in Typoskript ein:

In Typoskript definiert das Schlüsselwort type einen Alias ​​für einen Typ. Wir können auch das Schlüsselwort type verwenden, um benutzerdefinierte Typen zu definieren. Dies lässt sich am besten anhand eines Beispiels erklären:

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;

Sie können Arten von Skalar - Typen (komponieren string, numberusw.), aber auch von Literalwerte wie 1oder 'mystring'. Sie können sogar Typen anderer benutzerdefinierter Typen erstellen. Zum Beispiel hat Typ madnessdie Typen randomund colordrin.

Wenn wir dann versuchen, ein String-Literal zu unserem zu machen (und wir haben IntelliSense in unserer IDE), zeigt es Vorschläge:

Geben Sie hier die Bildbeschreibung ein

Es zeigt alle Farben, deren Typ-Wahnsinn sich aus der Typ-Farbe ergibt, 'zufällig', die vom Typ-Zufall abgeleitet ist, und schließlich die Zeichenfolge, 'foo'die sich auf dem Typ-Wahnsinn selbst befindet.

Willem van der Veen
quelle
Was ist der Unterschied zwischen benutzerdefinierten Typen und
Aufzählungen
1
@ORcoder gute Frage! Ich möchte es auch wissen. Eine gute Erklärung für uns zu verstehen!
Merv
Wo haben Sie die type color = "blue" | "red" | "yellow" | "purple";Anweisungen innerhalb oder außerhalb der Klasse deklariert ?
Lalit Kushwah