我正在尝试使用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 { ... }

07-24 09:44
查看更多