Що таке зарезервоване слово “type” у TypeScript?


105

Я щойно помітив, намагаючись створити інтерфейс у TypeScript, що "type" - це ключове слово або зарезервоване слово. Наприклад, під час створення наступного інтерфейсу "тип" відображається синім у Visual Studio 2013 з TypeScript 1.4:

interface IExampleInterface {
    type: string;
}

Скажімо, ви спробуєте реалізувати інтерфейс у класі, наприклад:

class ExampleClass implements IExampleInterface {
    public type: string;

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

У першому рядку класу, коли ви вводите (вибачте) слово "type", щоб реалізувати властивість, необхідну інтерфейсу, IntelliSense з'являється з "type", що має такий самий значок, як інші ключові слова, наприклад "typeof" або "new ".

Я подивився навколо, і міг знайти цю проблему GitHub, в якій "type" перераховано як "зарезервоване слово в суворому режимі" в TypeScript, але я не знайшов жодної додаткової інформації про те, яка його мета насправді.

Я підозрюю, що у мене пердеть мозок, і це щось очевидне, що я вже мав би знати, але для чого потрібне зарезервоване слово "type" у TypeScript?


Type Aliasнадати вашим типам семантичну назву: basarat.gitbooks.io/typescript/content/docs/types/…
basarat

Відповіді:


129

Він використовується для "псевдонімів типу". Наприклад:

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

Довідково: Специфікація TypeScript v1.5 (розділ 3.9, "Псевдоніми типів", сторінки 46 і 47)

Оновлення : Тепер у розділі 3.10 специфікації 1.8 . Дякую @RandallFlagg за оновлені специфікації та посилання

Оновлення : Підручник з TypeScript , пошук "Псевдоніми типів" може перейти до відповідного розділу.


24
Так, це було щось очевидне. Виявляється, досить важко знайти те, що ви шукаєте, коли шукаєте слово "тип" у контексті мов програмування - особливо, коли мова, про яку йде мова, називається "TypeScript". До речі, загальних словників досі не існує в TypeScript, чи не так?
Адам Гудвін,

1
Ось один, якщо він вам потрібен (для TS 0.9 і вище):
Jcl

Дякую, я думаю, що колись бачив цей проект, коли хотів словник, але врешті-решт вирішив просто обійтися.
Адам Гудвін,

концепція виникла з typedef ca ca check this studytonight.com/c/typedef.php
Pranoy Sarkar

31

Введіть ключове слово в машинопис:

У машинописі ключове слово type визначає псевдонім типу. Ми також можемо використовувати ключове слово type для визначення визначених користувачем типів. Це найкраще пояснити на прикладі:

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;

Ви можете складати типи скалярних типів ( string, numberтощо), але також і з літеральних значень, таких як 1або 'mystring'. Ви навіть можете складати типи інших визначених користувачем типів. Наприклад type madnessмає типи randomі colorв ньому.

Потім, коли ми намагаємось зробити рядок літералом нашим (а в нашій IDE є IntelliSense), він відображає пропозиції:

введіть тут опис зображення

Він показує всі кольори, тип божевілля походить від наявності кольору типу, "випадковий", який походить від типу random, і, нарешті, рядок, 'foo'який знаходиться на самому типі madness.


У чому різниця між визначеними користувачем типами та перелічуваними
ORcoder

1
@ORcoder гарне запитання! Я хочу також знати. Хороше пояснення для нас, щоб зрозуміти!
Merv

де ви оголосили type color = "blue" | "red" | "yellow" | "purple";твердження всередині або поза класом?
Lalit Kushwah
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.