typescript - 在 TypeScript 中编写通用克隆方法

标签 typescript

在 TypeScript 中,有没有一种方法可以让类在子类化时以一种有效的方式引用其构造函数?

abstract class Base<T> {
  constructor(readonly value: T) {}

  abstract getName(): string;

  clone() {
    const Cls = this.constructor;
    return new Cls(this.value);
  }
}

在这个片段中,Cls 被赋予了 Function 类型,因此编译器会提示:“不能将‘new’与类型缺少调用或构造的表达式一起使用签名。”

最佳答案

Typescript 不对构造函数使用严格类型(它仅使用 Function )并且由于这不是构造函数,因此不能使用 new 调用它.

简单的解决方案是使用类型断言:

abstract class Base<T> {
    constructor(readonly value: T) { }

    abstract getName(): string;

    clone() {
        // Using polymorphic this ensures the return type is correct in derived  types
        const Cls = this.constructor as new (value: T) => this;
        return new Cls(this.value);
    }
}

关于typescript - 在 TypeScript 中编写通用克隆方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56325751/

相关文章:

angular - 让 Amazon Cognito 使用 angular2 和 typescript

angular - 如何以 Angular 显示模型属性名称而不是 Json 键名称?

typescript - 如何在 TypeScript 中使用元数据键入表格数据?

javascript - 如何使用 Typescript 创建一个包含对象的字段的新对象?

reactjs - Typescript 动态类型取决于值(通用)

javascript - Angular/Ionic Observer 和 Observable

javascript - 无法解析 : comment: 1.\'comment\' 字段必须是 BSON 类型字符串

javascript - 使用 styled-components 来居中 React Bootstrap Modal

javascript - 如何在 TypeScript 中使用动态对象属性

jquery - 如何将 jQuery 的 $.post() 方法与 async/await 和 typescript 一起使用