export type A = "a" | "b" | "c";
const obj = { a: 4, b: 5, c: 6, d: 7 };
如何确保数组 A
的所有元素都是对象 obj
的键?
export type A = "a" | "b" | "c";
const obj = { a: 4, b: 5, c: 6, d: 7 };
如何确保数组 A
的所有元素都是对象 obj
的键?
根据你的需求,你可以自动构建你的类型:
你可以使用keyof
将所有键作为联合类型。由于keyof
需要用在一个类型上,在typeof obj
上使用keyof
:
const obj = { a: 4, b: 5, c: 6, d: 7 };
export type A = keyof typeof obj; // "a" | "b" | "c" | "d"
您可以使用Exclude
来删除某些键并获取其余部分:
您可以在Playground Link中尝试。
const obj = { a: 4, b: 5, c: 6, d: 7 };
type AllKeys = keyof typeof obj;
export type A = Exclude<AllKeys, "d">; // "a" | "b" | "c"
AllKeys
类型只是为了方便而存在,你可以内联使用Exclude<keyof typeof obj, "d">
。
这有点类似于Exclude
的反面 - 不是黑名单中的键,而是白名单中存在的键,使用交集来选择它们:
const obj = { a: 4, b: 5, c: 6, d: 7 };
type AllKeys = keyof typeof obj;
type AllowedKeys = "a" | "b" | "c" | "y" | "z";
export type A = AllKeys & AllowedKeys; // "a" | "b" | "c"
这里的 AllKeys
和 AllowedKeys
两种类型仅用于方便起见。您也可以将它们写为和此处相同的内容: keyof typeof obj & ("a" | "b" | "c" | "y" | "z")
。