类的打字稿定义作为对象属性

弗罗曼

我组建了一个快速.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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章