[英]Make sure a string literal union belongs to an object's keys
export type A = "a" | "b" | "c";
const obj = { a: 4, b: 5, c: 6, d: 7 };
如何確保A
所有元素都是對象obj
鍵?
根據您的需要,您可以自動構建您的類型:
您可以使用keyof
將所有鍵作為聯合。 由於keyof
需要對一種類型的所使用的, keyof typeof obj
:
const obj = { a: 4, b: 5, c: 6, d: 7 };
export type A = keyof typeof obj; // "a" | "b" | "c" | "d"
然后,您可以Exclude
一些鍵並獲取其余鍵:
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");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.