联合类型的部分键作为打字稿中对象的键

Jib*_*mas 12 javascript types typescript

我想使用联合类型的键作为打字稿中对象的键。

type EnumType = 'a1' | 'a2'

const object:{[key in EnumType]: string}= {
 a1: 'test'
}

Run Code Online (Sandbox Code Playgroud)

在这种情况下,我什至必须添加 a2 作为对象中的键。有没有办法让它成为可选的?

操场

Twi*_*her 24

只需添加一个问号,如下所示:

type EnumType = 'a1' | 'a2'

const object:{[key in EnumType]?: string}= {
 a1: 'test'
}
Run Code Online (Sandbox Code Playgroud)

object您当前代码的定义:

const object: {
    a1: string;
    a2: string;
}
Run Code Online (Sandbox Code Playgroud)

变成:

const object: {
    a1?: string | undefined;
    a2?: string | undefined;
}
Run Code Online (Sandbox Code Playgroud)

允许每个键都是可选的。


小智 17

请使用实用程序类型

type EnumType = "a1" | "a2";

const object: Partial<Record<EnumType, string>> = {
  a1: "test",
};

Run Code Online (Sandbox Code Playgroud)

  • 大约一个小时前,我尝试了类似“Record&lt;Partial&lt;EnumType&gt;, string&gt;&gt;”的操作,但未编译。然而,正如您指出的那样,将“Partial&lt;&gt;”放在外部而不是钥匙周围。也许是我,但是: 1.我觉得这不直观或合乎逻辑(我希望 KEY 是部分而不是整个记录);2. 实用程序类型文档页面不够详细,无法说明这是正确的语法。令人沮丧。感谢您提供答案@ZOFFY (2认同)