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

标签 typescript

我正在尝试使用 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/

相关文章:

javascript - 如何处理超过20位数字(大整数)?

javascript - 如何告诉 typescript ,那个过程不是未定义的?

dom - Angular 2 : change DOM elements outside the root AppComponent

typescript - 如果我的所有导入都来 self 自己的文件,我是否需要使用 TypeScript 3.8 的 "import type"功能?

C#/TypeScript 字节数组在发送到客户端时得到编码

typescript - 在类型 ' 上找不到参数类型为 'string' 的索引签名

typescript - Visual Studio Code 使用 "react-jsx"作为 jsx 值与 create-react-app 的问题

JavaScript/ typescript : unable to regenerate object

html - 如何在不实际单击按钮的情况下以编程方式从代码中打开 NgbPopOver

angular - NullInjectorError : No provider for NgZone!(Angular 6 库)