Литеральный тип

Литералы являются точной переменной, предоставляемой самим JavaScript.

Строковый литерал

Вы можете использовать строковый литерал в качестве типа:

let foo: 'Hello';

Здесь мы создали переменную с именем foo, которая принимает только одну переменную, буквальное значение которой равно Hello:

let foo: 'Hello';
foo = 'bar'; // Error: 'bar' не может быть назначен типу 'Hello'

Они сами по себе не очень практичны, но могут быть объединены для создания мощной (практической) абстракции в объединенном типе:

type CardinalDirection = 'North' | 'East' | 'South' | 'West';

function move(distance: number, direction: CardinalDirection) {
  // ...
}

move(1, 'North'); // ok
move(1, 'Nurth'); // Error

Другие литеральные типы

TypeScript также предоставляет boolean и number литеральные типы:

Вывод

Довольно часто вы получаете сообщение об ошибке типа Type string is not assignable to type 'foo'. Следующий пример демонстрирует это:

Это потому, что test выводится как { someProp: string }, мы можем использовать утверждение простого типа, чтобы сообщить TypeScript литералы, которые вы хотите вывести:

Или используйте аннотации типов, чтобы помочь TypeScript вывести правильный тип:

Случаи использования

Типы перечислений TypeScript основаны на числах. Вы можете использовать типы объединения со строковыми литералами для имитации типа перечисления на основе строк, так же как и CardinalDirection, предложенный выше. Вы даже можете использовать следующие функции для генерации структуры key: value:

Затем вы можете использовать keyof, typeof для генерации типа объединения строки. Вот полный пример:

Различать union

Мы объясним это позже в этой книге.

Last updated

Was this helpful?