我正在尝试使用 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
应该是T
的super 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/