我组建了一个快速.d.ts
的库,但击中了下面一个障碍:
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类定义,但是这种行为不符合我的期望。
在我的定义中最简单的表示方式是什么?
使用类和名称空间合并,您可以获得等效的静态类(可以使用该类访问的类,而不是类的实例):
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句