gpt4 book ai didi

Typescript 类 - 私有(private)字段应该在构造函数中吗?

转载 作者:行者123 更新时间:2023-12-02 23:51:16 24 4
gpt4 key购买 nike

我在 Typescript 中编写了一个单例类,以避免不断声明/创建相同的 OktaAuth对象即:new OktaAuth({ issuer: appConfig.OKTA_ORG_URL }) .

(顺便说一句,我这样做是因为我认为这是编写此类内容的最佳方式)

所以现在我的代码看起来像

export class OktaAuthorisation {
private static instance: OktaAuthorisation;

private constructor() {
}

static getInstance(): OktaAuthorisation {
if (!OktaAuthorisation.instance) {
OktaAuthorisation.instance = new OktaAuthorisation();
}

return OktaAuthorisation.instance;
}

private authClient = new OktaAuth({ issuer: appConfig.OKTA_ORG_URL });

async accessToken(): Promise<OktaAccessToken> {
return await this.authClient.tokenManager.get("accessToken");
}

async getOktaUserEmail() {
let oktaUser: OktaUser = await this.authClient.token.getUserInfo(await this.accessToken());

return oktaUser.email
}
}

我的问题是 private authClient = new OktaAuth({ issuer: appConfig.OKTA_ORG_URL }); 行应该在哪里居住?它在上面的哪里或者我应该在构造函数中设置它?

我不确定每次使用它时是否会重新创建它 - 我确实喜欢:

const oktaAuth = OktaAuthorisation.getInstance();

const myUser = await oktaAuth.getOktaUserEmail()

另外,一般来说,这是最简洁的方法吗?如果我不使用构造函数做任何事情,我想我可以删除它?

谢谢。

最佳答案

如果可能,请在字段声明中而不是在构造函数中设置类状态。这有帮助,因为:

  1. 它避免了意外的空/未定义错误,
  2. 它可以帮助人类读者快速确定默认值,
  3. 它减少了代码行数。

无论您在字段声明中还是在构造函数中设置类状态,该状态只会在每次创建类的新实例时重新创建,而不是每次访问字段时重新创建。 p>

综上所述...无论您是在字段声明中还是在构造函数中设置类状态,TypeScript 编译器输出都会在构造函数中设置它(默认情况下)。这是因为主流 JavaScript/ECMAScript 不支持字段声明 ( though plans to soon )。这是一个example from the playground左侧是 TypeScript,右侧是编译器输出。

enter image description here

关于Typescript 类 - 私有(private)字段应该在构造函数中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60272954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com