我正在快速.d.ts
为a 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类定义,但这并不像我希望的那样。
在我的定义中表示这个的最简单方法是什么?
答案 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