代码之家  ›  专栏  ›  技术社区  ›  kkh.name

是否有方法在typescript中声明使用该值作为键?

  •  1
  • kkh.name  · 技术社区  · 7 月前
    const obj = [
        {
            key: 'fruit',
            value: ['apple', 'banana']
        },
        {
            key: 'meat',
            value: ['pork', 'chicken']
        }
    ] as const;
    

    我想生成类型

    type T = {
        'fruit': 'apple' | 'banana',
        'meat': 'pork' | 'chicken'
    }
    

    我搜索过,但找不到如何使用值作为关键字。 如何从对象生成类型?

    1 回复  |  直到 7 月前
        1
  •  2
  •   jcalz    7 月前

    是的,您可以使用 mapped type with key remapping 迭代成员 union 对应于元素类型 obj 数组,并映射 "key" 键的属性和元素类型 "value" 财产价值:

    type Tee = { [O in typeof obj[number] as O["key"]]: O["value"][number] }
    /* type Tee = {
        fruit: "apple" | "banana";
        meat: "pork" | "chicken";
    } */
    

    请注意,您需要 the typeof type operator 要获取的类型 obj 价值,你需要 indexed access types 获取特定类型键的值的类型。所以如果 O 是一个对象 key value 属性,然后 O["key"] 是的类型 钥匙 财产和 O["value"] 是的类型 value 财产。对于数组,使用索引 number (例如。, (typeof obj)[number] (O["value"])[number] )为您提供元素类型(如果是异构数组,则提供它们的并集)。

    Playground link to code

    推荐文章