typescript - 从库依赖项创建单例
问题描述
我想创建一个我自己的类的单例,它依赖于 google-auth-library。
您可以像这样创建一个 oauthClient:
import { OAuth2Client } from "google-auth-library";
const OAuth2 = google.auth.OAuth2;
const getOauthClient = (
clientId: string,
clientSecret: string,
redirectUrl: string
): OAuth2Client => {
return new OAuth2(clientId, clientSecret, redirectUrl);
};
因此,我正在尝试添加这个实例,如果您将 getOauthClient 调用到我的 OauthClient 类中,它将被创建,如下所示:
class OauthClient{
constructor(
clientId: string,
clientSecret: string,
redirectUrl: string
){
if(OauthClient._instance){
throw new Error("Cannot initialize singleton class using new");
}
}
private static _instance: OauthClient = getOauthClient(clientId, clientSecret, redirectUrl);
public static get instance(): OauthClient{
return OauthClient._instance;
}
}
我该怎么做?
解决方案
我找到了答案,代码如下:
import { OAuth2Client } from "google-auth-library";
const OAuth2 = google.auth.OAuth2;
class OauthClient{
constructor() {
throw new Error(
"Cannot initialize singleton class using new. Use OauthClient.getInstance instead"
);
}
private static instance: OauthClient;
public static getInstance(
clientId: string,
clientSecret: string,
redirectUrl: string
): OauthClient {
if(!OauthClient.instance){
this.instance = new OAuth2(
clientId,
clientSecret,
redirectUrl
);
}
return OauthClient.instance;
}
}
推荐阅读
- javascript - 您可以将 html 标记用作 backdraftjs 中命名组件的子项吗?
- node.js - 如何基于另一个包在 monorepo 中创建类型?
- javascript - 使用来自 apollo-boots 的 Context 进行身份验证的问题
- javascript - 当我让 JavaScript 使用 XMLHTTPREQUEST 运行 PHP 脚本时找不到 PHP 文件路径(404 错误);该怎么办?
- amazon-web-services - 如何在 Terraform 中为 S3 上的 Lambda 引用处理程序
- spring-boot - 如何在 Spring Boot Keycloak Adapter 中禁用自动登录重定向
- javascript - 如何解决我的 React 应用程序中出现数千个错误的问题?
- python - 我怎样才能让这个功能运行?
- javascript - 使用 JavaScript 在字符串数组中查找与输入匹配的所有单词
- python - np.ones_like() 不返回数组