来自对象的字符串值的打字稿类型

Ale*_*lex 3 javascript arrays object typescript

值为字符串数组的对象:

const STUFF = {
  abc: ["string_1", "string_2"],
  def: ["string_3", "string_4"],
  xyz: ["string_1", "string_2", "string_4"],
}
Run Code Online (Sandbox Code Playgroud)

如何定义只允许这些数组中的值的类型?

type StuffStr = "string_1" | "string_2" | "string_3" | "string_4";
Run Code Online (Sandbox Code Playgroud)

iz_*_*iz_ 5

如果您const在 上使用断言STUFF,那么这就变成了索引问题typeof STUFF

const STUFF = {
  abc: ["string_1", "string_2"],
  def: ["string_3", "string_4"],
  xyz: ["string_1", "string_2", "string_4"],
} as const;

type StuffStr = typeof STUFF[keyof typeof STUFF][number];
// type StuffStr = "string_1" | "string_2" | "string_3" | "string_4"
Run Code Online (Sandbox Code Playgroud)

操场