【问题标题】:Initialise an array with values based on type values使用基于类型值的值初始化数组
【发布时间】:2022-12-13 21:16:40
【问题描述】:

我想用基于类型的值初始化一个数组:

type Pets = 'dog' | 'cat';

const PETS: Array<Pets> = []; // ['dog', 'cat'];

Pets是一个千变万化的类型,我需要用PETS来表示。

【问题讨论】:

    标签: typescript


    【解决方案1】:

    类型有点棘手。
    提议的选项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 下提到的枚举的缺点。
    【解决方案2】:

    您可以初始化常量,然后基于此常量创建类型:

    const PETS = ['dog', 'cat'] as const
    type Pets = typeof PETS[number];
    

    反之亦然,但您仍然只需要编写一次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多