Literal Types
Літерали — це точні значення, які є примітивами JavaScript.
String Literals
Ви можете використовувати рядковий літерал як тип. Наприклад:
Тут ми створили змінну під назвою foo
, яка дозволить лише призначити йому літеральне значення 'Hello'
. Це показано нижче:
Вони не дуже корисні самі по собі, але їх можна об’єднати в об’єднання типів для створення потужної (і корисної) абстракції, наприклад:
Other literal types
TypeScript також підтримує типи літералів boolean
і number
, наприклад:
Inference
Досить часто ви отримуєте помилку на зразок Тип string не можна призначити типу "foo"
. Наступний приклад демонструє це.
Це тому, що test
має тип {someProp: string}
. Виправлення тут полягає у використанні простого твердження типу, щоб повідомити TypeScript літерал, який ви хочете, щоб він визнав, як показано нижче:
або використовуйте анотацію типу, яка допомагає TypeScript вивести правильний висновок у точці оголошення:
Use cases
Допустимі варіанти використання типів рядкових літералів:
String based enums
TypeScript enums are number based. Ви можете використовувати рядкові літерали з типами об’єднання, щоб імітувати перелік на основі рядків, як ми робили у прикладі CardinalDirection
вище. Ви навіть можете створити структуру Key:Value
за допомогою такої функції:
А потім згенеруйте літеральне об’єднання типів за допомогою keyof typeof
. Ось повний приклад:
Modelling existing JavaScript APIs
наприклад CodeMirror editor has an option readOnly
, яка може бути або логічним значенням
, або літеральним рядком "nocursor"
(дійсні дійсні значення true ,false,"nocursor"
). Його можна оголосити так:
Discriminated Unions
Ми розглянемо this later in the book.
Last updated