[英]Optional<T, Props> generic type in TypeScript
我正在嘗試創建類型Optional<T, TProps>
其中T
- 初始類型, TProps
- 必須是可選的屬性的聯合類型。
例如:
type A = Optional<{a: string, b: string}, 'a'>
const a: A = {b: 'foo'} // No Error
我希望這會起作用,但它不起作用type Optional<T extends object, TProps extends keyof T> = {[TKey in keyof T]: TKey extends TProps ? T[TKey] | never : T[TKey]}
type Optional<T extends object, TProps extends keyof T> = {[TKey in keyof T]: TKey extends TProps ? T[TKey] | never : T[TKey]}
根據您上面的代碼,我認為您需要連接Exclude
和Pick
解決方案。
我正在和他們一起玩,似乎以下解決方案有效:
type Optional<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>> & Partial<Pick<T, K>>
下面的例子將顯示一個錯誤,如果你想添加到b
不正確的字段並且如果你刪除可選參數不會突出顯示:
interface BI {
a: number
b: number
g: string,
f: boolean
}
const a: BI = {a: 1, b: 2, g: 'sdf', f: true}
const b: Optional<BI, 'g'> = {a: 5, b: 1, f: true}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.