确保字符串字面量联合类型属于对象的键。

4
export type A = "a" | "b" | "c";

const obj = { a: 4, b: 5, c: 6, d: 7 };

如何确保数组 A 的所有元素都是对象 obj 的键?

1个回答

3

根据你的需求,你可以自动构建你的类型:

将所有键作为类型

你可以使用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"

Playground Link

这里的 AllKeysAllowedKeys 两种类型仅用于方便起见。您也可以将它们写为和此处相同的内容: keyof typeof obj & ("a" | "b" | "c" | "y" | "z")


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接