Co to jest słowo zastrzeżone „typ” w języku TypeScript?


106

Właśnie zauważyłem, próbując utworzyć interfejs w TypeScript, że „typ” jest albo słowem kluczowym, albo zastrzeżonym słowem. Na przykład podczas tworzenia następującego interfejsu „typ” jest wyświetlany na niebiesko w programie Visual Studio 2013 z językiem TypeScript 1.4:

interface IExampleInterface {
    type: string;
}

Załóżmy, że następnie spróbujesz zaimplementować interfejs w klasie, na przykład:

class ExampleClass implements IExampleInterface {
    public type: string;

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

W pierwszym wierszu klasy, gdy wpiszesz (przepraszam) słowo „typ” w celu zaimplementowania właściwości wymaganej przez interfejs, pojawi się IntelliSense z „typem” z tą samą ikoną co inne słowa kluczowe, takie jak „typeof” lub „nowy ”.

Rozejrzałem się i mogłem znaleźć ten problem z GitHub, który wymienia „typ” jako „zastrzeżone słowo trybu ścisłego” w TypeScript, ale nie znalazłem żadnych dalszych informacji o tym, jaki jest jego cel.

Podejrzewam, że mam pierdnięcie mózgiem i jest to coś oczywistego, o czym powinienem już wiedzieć, ale do czego służy słowo zastrzeżone „typ” w języku TypeScript?


Type Aliasaby nadać swoim typom nazwę semantyczną: basarat.gitbooks.io/typescript/content/docs/types/…
basarat

Odpowiedzi:


130

Służy do „aliasów typów”. Na przykład:

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

Odniesienie: Specyfikacja TypeScript w wersji 1.5 (sekcja 3.9, „Aliasy typów”, strony 46 i 47)

Aktualizacja : teraz w sekcji 3.10 specyfikacji 1.8 . Dzięki @RandallFlagg za zaktualizowaną specyfikację i łącze

Aktualizacja : Podręcznik języka TypeScript , wyszukaj „Aliasy typów”, aby przejść do odpowiedniej sekcji.


26
Tak, więc to było coś oczywistego. Okazuje się, że trudno jest znaleźć to, czego szukasz, szukając słowa „typ” w kontekście języków programowania - szczególnie, gdy dany język nazywa się „TypeScript”. Nawiasem mówiąc, ogólne słowniki nadal nie istnieją w TypeScript, prawda?
Adam Goodwin,

1
Oto jeden, jeśli go potrzebujesz (dla TS 0.9 i nowszych):
Jcl

Dzięki, myślę, że widziałem ten projekt już raz, kiedy chciałem mieć słownik, ale w końcu zdecydowałem się po prostu obejść bez.
Adam Goodwin,

koncepcja pochodzi z typedef in ca sprawdź to studytonight.com/c/typedef.php
Pranoy Sarkar.

33

Wpisz słowo kluczowe w maszynopisie:

W maszynopisie słowo kluczowe type definiuje alias do typu. Możemy również użyć słowa kluczowego type do zdefiniowania typów zdefiniowanych przez użytkownika. Najlepiej wyjaśnić to na przykładzie:

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;

Można komponować rodzajów typów skalarnych ( string, numberitp), ale również wartości, takich jak dosłowne 1lub 'mystring'. Możesz nawet komponować typy innych typów zdefiniowanych przez użytkownika. Na przykład typ madnessma typy randomi colorw nim.

Następnie, gdy próbujemy nadać ciągowi literał nasz (i mamy IntelliSense w naszym IDE), pokazuje sugestie:

wprowadź opis obrazu tutaj

Pokazuje wszystkie kolory, które typowe szaleństwo wywodzi się z posiadania koloru typu, „random”, który wywodzi się z typu random, i wreszcie ciąg, 'foo'który znajduje się na samym typie szaleństwa.


1
Jaka jest różnica między typami zdefiniowanymi przez użytkownika a
wyliczalnymi

1
@ORcoder dobre pytanie! Ja też chcę wiedzieć. Dobre wyjaśnienie do zrozumienia!
Merv

gdzie zadeklarowałeś type color = "blue" | "red" | "yellow" | "purple";oświadczenia w klasie lub poza nią?
Lalit Kushwah

Może to pomóc w odniesieniu do różnicy między typami zdefiniowanymi przez użytkownika a
wyliczeniami
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.