【发布时间】:2022-12-13 21:16:40
【问题描述】:
我想用基于类型的值初始化一个数组:
type Pets = 'dog' | 'cat';
const PETS: Array<Pets> = []; // ['dog', 'cat'];
Pets是一个千变万化的类型,我需要用PETS来表示。
【问题讨论】:
标签: typescript
我想用基于类型的值初始化一个数组:
type Pets = 'dog' | 'cat';
const PETS: Array<Pets> = []; // ['dog', 'cat'];
Pets是一个千变万化的类型,我需要用PETS来表示。
【问题讨论】:
标签: typescript
类型有点棘手。
提议的选项A_A 有点常见。
如果它不一定必须是 type,您可以将其替换为 enum,这将允许您迭代它的值。
例子:
enum Pets {
Cat = 'cat'
Dog = 'dog'
}
const pets: Pets[] = (Object.keys(Pets) as Array<keyof typeof Pets>).map(x => Pets[x])
// pets = ['cat', 'dog']
要访问 enum 中的值,您可以使用它们的字符串值或左侧属性。
例如,这两个都应该工作:
const pets: Pets
// First option:
if (pets[0] === 'cat') {
...
}
// Second option:
if (pets[0] === Pets.Cat) {
...
}
笔记:
const enum 不同,enum 类型会向包中添加一些 JS 代码(TS 通常不应该这样做),请记住这一点。【讨论】:
enum。谢谢你的帖子。
Notes 下提到的枚举的缺点。
您可以初始化常量,然后基于此常量创建类型:
const PETS = ['dog', 'cat'] as const
type Pets = typeof PETS[number];
反之亦然,但您仍然只需要编写一次。
【讨论】: