我正在尝试使用updeep
库。使用updeep
的典型示例如下:
var person = {
name: {
first: 'Jane',
last: 'West'
}
};
var result = u({ name: { first: 'Susan' } }, person);
这里的想法是
result
将是person
的克隆,但是name.first
的值已更改。您可以想象在TypeScript中定义的函数u
为:function u<T>(changes: {}, obj: T): T { ... }
这捕获了第二个参数的类型也是函数的返回类型的事实。但是它没有表示
changes
应该是T
的父类(super class)型。我想要的是对第一个参数进行某种类型检查。关键是
changes
争论中存在的值都应全部存在于T
类型参数中,并与那里的对应类型匹配。表达这一点使我们可以检查changes
参数,以确保它对于T
类型(即T
的父类(super class)型)有意义。我不确定在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 { ... }