[英]Defining the inverse of Partial<T> in TypeScript
TypeScript 有一個默認定義的Partial
類型,所以你可以說Partial<{x: number, y: string}>
來得到像{x?: number, y?: string}
這樣的類型(類型的屬性變成可選的)。 它被定義為
type Partial<T> = {
[P in keyof T]?: T[P]
}
我正在嘗試定義逆函數,我們稱它為Full<T>
,它確保 object 中的所有屬性都是必需的。 我從明顯的定義開始:
type Full<T> = {
[P in keyof T]: T[P]
}
這只是Partial
刪除了問號。 不幸的是,這不起作用——可選屬性仍然是可選的。 在某些情況下,typescript 似乎以某種方式保留了有關keyof
類型中屬性名稱的必要性的信息。
有趣的是,如果您將該類型存儲在中間類型名稱中,則該信息將被刪除。 即這有效:
type Config = {foo: number, bar?: string}
type ConfigKey = keyof Config
type FullConfig = {[K in ConfigKey]: Config[K]}
在FullConfig
中(至少在 TypeScript 3.3 中), bar
是必需的。 但是如果你將keyof Config
內聯到FullConfig
的定義中,它又是可選的。
我希望這是一個單一的、易於使用的類型,並且由於我不知道類型聲明定義本地類型的方法,所以這個 hack 似乎沒有多大幫助。
我缺少什么技巧嗎?
type UndoParital<T> = T extends Partial<infer R>? R: T;
從 TypeScript 2.8 開始,我們現在有了Required<Type>
實用程序類型。
從文檔:
構造一個類型,該類型由設置為必需的 Type 的所有屬性組成。 與部分相反。
https://www.typescriptlang.org/docs/handbook/utility-types.html#requiredtype
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.