作为对象属性的类的Typescript定义

时间:2018-03-13 07:12:11

标签: javascript typescript typescript-definitions

我正在快速.d.tsa library整理,但遇到了以下问题:

class Issuer {
    constructor(metadata) {
        // ...
        const self = this;
        Object.defineProperty(this, 'Client', {
            value: class Client extends BaseClient {
                static get issuer() {
                    return self;
                }
                get issuer() {
                    return this.constructor.issuer;
                }
            },
        });
    }
    // ...
}

这是面向用户API使用的(googleIssuer是Issuer的实例)。

const client = new googleIssuer.Client({
    // ...
})

我尝试使用具有相同名称的命名空间扩展Issuer类定义,但这并不像我希望的那样。

在我的定义中表示这个的最简单方法是什么?

1 个答案:

答案 0 :(得分:1)

使用类和命名空间合并,您将获得静态类(可以使用类访问的类,而不是类的实例)的等价物:

declare class Issuer {

}

declare namespace Issuer {
    class Client{}
}
declare class GoogleIssuer extends Issuer {
}
let d = new GoogleIssuer.Client() // Ok
let googleIssuer = new GoogleIssuer();
let c = new googleIssuer.Client() // error

您想要的是与类上的实例绑定的类定义。为此,您可以将类声明为Issuer类的字段:

// Declare the structure of client separately 
declare class Client {

}
declare class Issuer {
    Client: typeof Client; // Declare a field that is of the class type
}
declare class GoogleIssuer extends Issuer {
}
let googleIssuer = new GoogleIssuer();
let c = new googleIssuer.Client() // ok