如何使用父静态方法在 TypeScript 中创建子 class?

How to create a child class in TypeScript using parent static method?

我有两个 classes:模型和用户。用户扩展模型。

export Model {
  id: number;
  static fromData<T>(data: any): T {
    return Object.assign(new Model(), data);
  }
}

export User extends Model {
  name: string;
  sayHi(): string {
    return 'Hi, ' + this.name;
  }
}

我想使用它的方式是这样的:

const currentUser = User.fromData(dataFromServer);
const message = currentUser.sayHi();

方法 hi() 不起作用,因为我创建了一个模型实例 class。

如何使用 TypeScript 泛型通过基 class 静态方法获取派生 class 的实例?

我正在计划具有共同点的不同实体的数量。

我看到了 ,但我不知道如何将参数传递给静态方法。

由于静态方法在 class 本身上,我们可以在静态方法内部使用 this 访问 class 构造函数,this 是 class 自己。如果我们将静态方法的 this 参数限制为 returning T (this: new ()=> T ) 的构造函数,我们将获得 return 值的正确类型。 this 参数只是为了打字稿编译器的好处,它实际上不会被发送到 JS,你不必显式传递它:

export class Model {
    id: number;
    static fromData<T>(this: new () => T, data: any): T {
        return Object.assign(new this(), data);
    }
}

export class User extends Model {
    name: string;
    sayHi(): string {
        return 'Hi, ' + this.name;
    }
}

const currentUser = User.fromData({ id: 10, name: ""});
const message = currentUser.sayHi();

游乐场link