Литералы¶
Литералы - это фиксированные значения, которые являются примитивами JavaScript.
Строковые литералы¶
Вы можете использовать строковый литерал в качестве типа. Например:
1 |
|
Здесь мы создали переменную с именем foo
, которая позволяет присваивать ей только литеральное значение 'Hello'
. Это продемонстрировано ниже:
1 2 |
|
Они не очень полезны сами по себе, но могут быть собраны в тип объединение для создания мощной (и полезной) абстракции, например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Другие литеральные типы¶
TypeScript также поддерживает литеральные типы boolean
и number
, например:
1 2 |
|
Логический вывод¶
Как правило, вы получаете сообщение об ошибке: Тип string не может быть назначен для типа "foo"
. Следующий пример демонстрирует это.
1 2 3 4 5 6 |
|
Это потому, что test
подразумевает тип {someProp: string}
. Решением в этом случае было бы использование простого утверждения типа. Для того чтобы сообщить TypeScript литерал, который вы хотите, чтобы он выводил, как показано ниже:
1 2 3 4 5 |
|
или используйте описание типа, которое поможет TypeScript понять правильный тип в точке объявления:
1 2 3 4 5 6 7 8 9 |
|
Случаи использования¶
Возможные варианты использования для строковых литералов:
Тип перечисление на основе строк¶
Тип перечисление в TypeScript основан на числах. Вы можете использовать строковые литералы вместе с объединенными типами, чтобы сымитировать перечисление на основе строки, как мы это делали в примере CardinalDirection
выше. Вы даже можете сгенерировать структуру Key: Value
, используя следующую функцию:
1 2 3 4 5 6 7 8 9 |
|
А затем сгенерируйте тип объединение из литеральных типов, используя keyof typeof
. Вот полный пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
Моделирование имеющихся JavaScript API¶
Например В редакторе CodeMirror есть опция readOnly
, которая может быть либо boolean
, либо литеральной строкой "nocursor"
(валидные допустимые значения true,false,"nocursor"
). Это может быть объявлено как:
1 |
|
Размеченные объединения¶
Мы расскажем об этом позже в книге.