Typescript 声明:合并一个 class 和一个接口

Typescript declaration: Merge a class and an interface

我有两个模型 Model 及其子类 ClientModel 一个环境模块。现在我想从所谓的 Client 接口声明一组 ClientModel 的属性。我该怎么做?我可以想象这样的事情:

interface Client {
    name: string;
    email: string;
}

declare class ClientModel extends Model implements Client {
    // with name and email here without redeclare them
}

您可以使用声明合并。如果 class 和接口在同一个 namespace/module 中声明并且具有相同的名称,它们将合并为一个 class 类型。

interface ClientModel {
    name: string;
    email: string;
}

class ClientModel extends Model  {
    m() {
        this.email //Valid 
    }
}

如果您无法更改接口或在另一个命名空间中声明并且您无法移动它,您可以在合并的接口中继承它:

interface Client {
    name: string;
    email: string;
}

interface ClientModel extends Client {}
class ClientModel extends Model  {
    m() {
        this.email //Valid 
    }
}