[英]Union type derived from keyof class in TypeScript
在 TypeScript 中有沒有辦法使聯合類型成為僅在類中找到的鍵的聯合?
例如,讓MyClass
如下:
class MyClass {
propertyA: string;
propertyB: number;
propertyC: number[];
someMethod() {
// Do something
}
}
有什么方法可以告訴 TypeScript 我只想要一個來自MyClass
屬性的聯合類型? 所以,像
type MyType in keyof MyClass = "propertyA" | "propertyC";
這是無效的語法,但這是我正在尋找的效果。
另外如果我嘗試
type MyType in keyof MyClass = "propertyA" | "propertyC" | "heyThere";
這將是一個錯誤,但以下
type MyType in keyof MyClass = "propertyA" | "propertyB" | "propertyC";
不會。
我在 TypeScript 中缺乏正式的詞匯,所以我不確定這里有什么幫助。
我在這里和網上都看過,但我發現了與我想要的不同的東西。 例如,我遇到過
type MyType = keyof MyClass;
但這給了我MyClass
一切。
獎勵:我們如何告訴 TypeScript 我們期望的類型必須是字符串的聯合?
我還注意到,如果我使用Pick
內置類型,TypeScript 會正確地強制我為該類選擇鍵,而Omit
內置類型則不會。 這就是為什么我要尋找這個警告。
沒有像您描述的那樣起作用的內置語法,但是您可以像這樣創建輔助類型別名:
type MustExtend<U, T extends U> = T;
然后代替
// type MyType in keyof MyClass = "propertyA" | "propertyC";
你可以寫
type MyType = MustExtend<keyof MyClass, "propertyA" | "propertyB">; // okay
// type MyType = "propertyA" | "propertyB"
它可以按需要工作。 如果你犯了錯誤,它會警告你:
type MyType2 =
MustExtend<keyof MyClass, "propertyA" | "propertyC" | "heyThere">; // error!
// -----------------------> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Type '"heyThere"' is not assignable to type 'keyof MyClass'.
也隨心所欲。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.