首页 > 解决方案 > 如何创建通用函数以从接口转换为实现类

问题描述

我有一个 Rest API,并将响应反序列化为普通的 Javascript 对象。

我有实现代表 Rest 响应的接口并具有附加功能的类。

例如

interface IUser {
  FirstName: string;
  LastName: string;
}

class User implements IUser {
  private firstName: string;
  private lastName: string;

  public get FirstName(): string {
    return this.firstName;
  }
  public set FirstName(value: string) {
    this.firstName = value;
  }

  public get LastName(): string {
    return this.lastName;
  }
  public set LastName(value: string) {
    this.lastName = value;
  }

  // Extra Stuff
  public get FullName(): string {
    return `${this.FirstName} ${this.LastName}`
  }

  constructor(firstName: string, lastName: string) {
    this.firstName = firstName;
    this.lastName = lastName;
  }
}

我想做的是在共享基类中实现一个方法,它将接口转换为实现它的类。

我尝试使用泛型类型别名,但出现错误? expected,这对我来说没有多大意义。

我认为这抓住了我的想法的总体思路。

type extendedBy<TInterface, T> = T extends TInterface;
abstract class AbstractBaseModel {
    public fillFromInterface<TInterface extends extendedBy<TInterface, this>>(iface: TInterface): this {
      Object.assign(this, iface);
    }
}

用户会扩展AbstractBaseModel,理想情况下它会像这样使用

let apiUser = getUserFromApi(userId);
let user = User.fromInterface(apiUser);

打字稿中目前有什么与此类似的东西吗?还是我需要每个类实现自己的 fromInterface 方法?

标签: typescript

解决方案


推荐阅读