gpt4 book ai didi

typescript - TypeScript 中的父类(super class)型约束

转载 作者:搜寻专家 更新时间:2023-10-30 20:59:20 29 4
gpt4 key购买 nike

我正在尝试使用 updeep 库。使用 updeep 的一个典型例子是这样的:

var person = {
name: {
first: 'Jane',
last: 'West'
}
};

var result = u({ name: { first: 'Susan' } }, person);

这里的想法是 result 将是 person 的克隆,但 name.first 的值已更改。您可以想象这个函数 u 在 TypeScript 中定义为:

function u<T>(changes: {}, obj: T): T { ... }

这捕捉到第二个参数的类型也是函数的返回类型这一事实。但是它没有表达的是changes应该是Tsuper type

我想要的是对第一个参数进行某种类型检查。关键是 changes 参数中出现的值应该全部出现在 T 类型参数中,并匹配它们对应的类型。表达这一点允许我们检查 changes 参数以确保它对于类型 T 有意义(即,T).

我不确定这在 TypeScript 中是否可行。在 Java 等语言中,您有 super 关键字,它可用于描述对类型参数的约束。

虽然 TypeScript 不允许,但像这样表达了我想要的东西:

function u<T extends U,U extends {}>(changes: U, obj: T): T { ... }

有人对如何表达这个有什么建议吗?如果有一个类型安全的系统来执行此类转换,那就太好了。

谢谢。

最佳答案

自 TypeScript 2.1 以来,这已成为可能 Partial<T>

原来的问题可以用

解决

function u<T>(changes: Partial<T>, obj: T): T { ... }

关于typescript - TypeScript 中的父类(super class)型约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33703224/

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