Что такое зарезервированное слово «тип» в TypeScript?

106

Я только что заметил, когда пытался создать интерфейс в TypeScript, что «тип» - это либо ключевое слово, либо зарезервированное слово. При создании следующего интерфейса, например, «тип» отображается синим цветом в Visual Studio 2013 с TypeScript 1.4:

interface IExampleInterface {
    type: string;
}

Допустим, вы затем пытаетесь реализовать интерфейс в классе, например:

class ExampleClass implements IExampleInterface {
    public type: string;

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

В первой строке класса, когда вы вводите (извините) слово «тип», чтобы реализовать свойство, требуемое интерфейсом, IntelliSense появляется с «типом», имеющим тот же значок, что и другие ключевые слова, такие как «typeof» или «new». ".

Я осмотрелся и мог найти эту проблему GitHub, в которой «тип» перечисляется как «зарезервированное слово строгого режима» в TypeScript, но я не нашел никакой дополнительной информации о том, какова его цель на самом деле.

Я подозреваю, что у меня пердит мозг, и это очевидно, что я уже должен знать, но для чего это зарезервированное слово «тип» в TypeScript?

Адам Гудвин
источник
Type Aliasчтобы дать вашим типам семантическое имя: basarat.gitbooks.io/typescript/content/docs/types/…
basarat

Ответы:

130

Он используется для «псевдонимов типов». Например:

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

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

Обновление : теперь в разделе 3.10 спецификации 1.8 . Спасибо @RandallFlagg за обновленную спецификацию и ссылку

Обновление : Руководство по TypeScript , поиск «Псевдонимы типов» может привести вас в соответствующий раздел.

Jcl
источник
26
Ага, значит, это было что-то очевидное. Оказывается, довольно сложно найти то, что вы ищете, когда вы ищете слово «тип» в контексте языков программирования, особенно когда этот язык называется «TypeScript». Кстати, универсальных словарей в TypeScript все еще нет, верно?
Адам Гудвин,
1
Вот один, если он вам нужен (для TS 0.9 и выше):
Jcl,
Спасибо, мне кажется, я уже однажды видел этот проект, когда хотел словарь, но в конце концов решил просто обойтись без него.
Адам Гудвин,
концепция пришла из typedef, проверьте это studytonight.com/c/typedef.php
Pranoy Sarkar
33

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

В машинописном тексте ключевое слово 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'. Вы даже можете составлять типы из других определяемых пользователем типов. Например, у типа madnessесть типы randomи colorв нем.

Затем, когда мы пытаемся сделать строковый литерал нашим (а в нашей IDE есть IntelliSense), он показывает предложения:

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

Он показывает все цвета: безумие типов происходит от цвета типа, «случайный» - от типа случайный и, наконец, строка, 'foo'которая находится в самом безумии типов.

Виллем ван дер Вин
источник
1
В чем разница между типами, определяемыми пользователем, и перечисляемыми
ORcoder
1
@ORcoder хороший вопрос! Я тоже хочу знать. Хорошее объяснение для нас!
Мерв
где вы объявили type color = "blue" | "red" | "yellow" | "purple";утверждения внутри или вне класса?
Lalit Kushwah
Это может помочь в отношении разницы между определяемыми пользователем типами и перечислениями
Кристоф Фузье