Здесь показаны различия между двумя версиями данной страницы.
|
typescript:types:literal [2023/01/29 20:09] werwolf создано |
typescript:types:literal [2023/01/29 20:10] (текущий) werwolf |
||
|---|---|---|---|
| Строка 7: | Строка 7: | ||
| Вы можете использовать строковый литерал в качестве типа. Например: | Вы можете использовать строковый литерал в качестве типа. Например: | ||
| - | <code> | + | <code javascript> |
| let foo: 'Hello'; | let foo: 'Hello'; | ||
| </code> | </code> | ||
| Строка 13: | Строка 13: | ||
| Здесь мы создали переменную с именем ''foo'', которая позволяет присваивать ей только литеральное значение '''Hello'''. Это продемонстрировано ниже: | Здесь мы создали переменную с именем ''foo'', которая позволяет присваивать ей только литеральное значение '''Hello'''. Это продемонстрировано ниже: | ||
| - | <code> | + | <code javascript> |
| let foo: 'Hello'; | let foo: 'Hello'; | ||
| foo = 'Bar'; // Ошибка: "Bar" нельзя назначить типу "Hello" | foo = 'Bar'; // Ошибка: "Bar" нельзя назначить типу "Hello" | ||
| Строка 20: | Строка 20: | ||
| Они не очень полезны сами по себе, но могут быть собраны в тип объединение для создания мощной (и полезной) абстракции, например: | Они не очень полезны сами по себе, но могут быть собраны в тип объединение для создания мощной (и полезной) абстракции, например: | ||
| - | <code> | + | <code javascript> |
| type CardinalDirection = | type CardinalDirection = | ||
| | 'North' | | 'North' | ||
| Строка 42: | Строка 42: | ||
| TypeScript также поддерживает литеральные типы ''boolean'' и ''number'', например: | TypeScript также поддерживает литеральные типы ''boolean'' и ''number'', например: | ||
| - | <code> | + | <code javascript> |
| type OneToFive = 1 | 2 | 3 | 4 | 5; | type OneToFive = 1 | 2 | 3 | 4 | 5; | ||
| type Bools = true | false; | type Bools = true | false; | ||
| Строка 51: | Строка 51: | ||
| Как правило, вы получаете сообщение об ошибке: ''Тип string не может быть назначен для типа "foo"''. Следующий пример демонстрирует это. | Как правило, вы получаете сообщение об ошибке: ''Тип string не может быть назначен для типа "foo"''. Следующий пример демонстрирует это. | ||
| - | <code> | + | <code javascript> |
| function iTakeFoo(foo: 'foo') {} | function iTakeFoo(foo: 'foo') {} | ||
| const test = { | const test = { | ||
| Строка 62: | Строка 62: | ||
| Это потому, что ''test'' подразумевает тип ''{someProp: string}''. Решением в этом случае было бы использование простого утверждения типа. Для того чтобы сообщить TypeScript литерал, который вы хотите, чтобы он выводил, как показано ниже: | Это потому, что ''test'' подразумевает тип ''{someProp: string}''. Решением в этом случае было бы использование простого утверждения типа. Для того чтобы сообщить TypeScript литерал, который вы хотите, чтобы он выводил, как показано ниже: | ||
| - | <code> | + | <code javascript> |
| function iTakeFoo(foo: 'foo') { } | function iTakeFoo(foo: 'foo') { } | ||
| const test = { | const test = { | ||
| Строка 72: | Строка 72: | ||
| или используйте описание типа, которое поможет TypeScript понять правильный тип в точке объявления: | или используйте описание типа, которое поможет TypeScript понять правильный тип в точке объявления: | ||
| - | <code> | + | <code javascript> |
| function iTakeFoo(foo: 'foo') {} | function iTakeFoo(foo: 'foo') {} | ||
| type Test = { | type Test = { | ||
| Строка 92: | Строка 92: | ||
| [[.|Тип перечисление в TypeScript основан на числах]]. Вы можете использовать строковые литералы вместе с объединенными типами, чтобы сымитировать перечисление на основе строки, как мы это делали в примере ''CardinalDirection'' выше. Вы даже можете сгенерировать структуру ''Key: Value'', используя следующую функцию: | [[.|Тип перечисление в TypeScript основан на числах]]. Вы можете использовать строковые литералы вместе с объединенными типами, чтобы сымитировать перечисление на основе строки, как мы это делали в примере ''CardinalDirection'' выше. Вы даже можете сгенерировать структуру ''Key: Value'', используя следующую функцию: | ||
| - | <code> | + | <code javascript> |
| /** Утилита для создания K:V из списка строк */ | /** Утилита для создания K:V из списка строк */ | ||
| function strEnum<T extends string>( | function strEnum<T extends string>( | ||
| Строка 106: | Строка 106: | ||
| А затем сгенерируйте тип объединение из литеральных типов, используя ''keyof typeof''. Вот полный пример: | А затем сгенерируйте тип объединение из литеральных типов, используя ''keyof typeof''. Вот полный пример: | ||
| - | <code> | + | <code javascript> |
| /** Утилита для создания K:V из списка строк */ | /** Утилита для создания K:V из списка строк */ | ||
| function strEnum<T extends string>( | function strEnum<T extends string>( | ||