Литералы¶
Литералы - это фиксированные значения, которые являются примитивами 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 | |
Размеченные объединения¶
Мы расскажем об этом позже в книге.