gpt4 book ai didi

typescript - TypeScript 中的 Optional 泛型类型

转载 作者:搜寻专家 更新时间:2023-10-30 21:33:49 24 4
gpt4 key购买 nike

我正在尝试创建类型 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]}

最佳答案

根据您上面的代码,我认为您需要合并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}

关于typescript - TypeScript 中的 Optional<T, Props> 泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55046309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com