TypeScript中的可选<t,props =“”>泛型类型

时间:2019-03-07 14:35:18

标签: 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]}

1 个答案:

答案 0 :(得分:2)

根据上面的代码,我认为您需要使用ExcludePick解决方案。

我正在和他们一起玩,看来,以下解决方案有效:

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}