簡體   English   中英

確保字符串文字聯合屬於對象的鍵

[英]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"

游樂場鏈接

同樣,為了方便起見,這里有兩種類型的AllKeysAllowedKeys 你也可以有同樣的keyof typeof obj & ("a" | "b" | "c" | "y" | "z");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM