Литеральный тип
Литералы являются точной переменной, предоставляемой самим 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?