class 作为对象 属性 的打字稿定义
Typescript definition for a class as an object property
我正在为 a library 快速整理 .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 class 定义,但这并不像我希望的那样。
在我的定义中,最简单的表示方法是什么?
使用 class 和命名空间合并,您将获得静态 class 的等价物(可以使用 class 访问的 class,而不是 a 的实例class):
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
您想要的是一个 class 定义,它绑定到 class 上的一个实例。为此,您可以将 class 声明为 Issuer
class 的字段:
// 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
我正在为 a library 快速整理 .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 class 定义,但这并不像我希望的那样。
在我的定义中,最简单的表示方法是什么?
使用 class 和命名空间合并,您将获得静态 class 的等价物(可以使用 class 访问的 class,而不是 a 的实例class):
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
您想要的是一个 class 定义,它绑定到 class 上的一个实例。为此,您可以将 class 声明为 Issuer
class 的字段:
// 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