具有静态变量/单例模式的打字稿类

加布里埃尔·科斯塔(Gabriel Costa)

好吧,我有一个关于编码这种情况的最佳方法的问题:我有一个需要在所有项目中使用静态变量的类:连接

没有名称空间的单例:

class Broker {
  static connection: Connection = undefined;
  static channel: Channel = undefined;
  static urli: string = process.env.RABBIT_URL || 'url';
  static start() {
    return new Promise<Connection>((resolve, reject) => {
      if (Broker.connection || !Broker.urli) {
        const message = !Broker.urli
          ? 'The host of rabbitmq was not found in the environment variables'
          : 'Connection has already been established';
        logger.info(message);
        reject(new Error(message));
      }
      retry<Connection>(() => connect(Broker.urli), 10, 1000)
        .then((conn) => {
          Broker.connection = conn;
          resolve(conn);
        })
        .catch((err) => reject(new Error(err)));
    });
  }
}
export const ConnectionMQ: Connection = Broker.connection;
export const ChannelMQ: Channel = Broker.channel;
export const start = () => {
  return Broker.start();
};

与名称空间

//namespace
namespace Broker {
  export type QueuesToAssert = { queue: string; options?: Options.AssertQueue };
  export type ExchangesToAssert = {
    exchange: string;
    type: string;
    options?: Options.AssertExchange;
  };
  export type QueuesToBind = {
    queue: string;
    source: string;
    pattern: string;
    args?: any;
  };
  //static
  class BrokerMain {
    static connection: Connection = undefined;
    static channel: Channel = undefined;
    static urli: string = process.env.RABBIT_URL || 'url';
    static start() {
      return new Promise<Connection>((resolve, reject) => {
        if (BrokerMain.connection || !BrokerMain.urli) {
          const message = !BrokerMain.urli
            ? 'The host of rabbitmq was not found in the environment variables'
            : 'Connection has already been established';
          logger.info(message);
          reject(new Error(message));
        }
        retry<Connection>(() => connect(BrokerMain.urli), 10, 1000)
          .then((conn) => {
            this.connection = conn;
            resolve(conn);
          })
          .catch((err) => reject(new Error(err)));
      });
    }
  }
  export const Connection = BrokerMain.connection;
  export const Channel = BrokerMain.channel;
  export const start = () => {
    return BrokerMain.start();
  };
  export const close = () => {};
}
//usage
const connection = Broker.Connection ? Broker.start() : undefined;

我想知道在这种情况下最好/正确的选择是什么,或者我是否可以对这种情况应用另一种方法。记住我只需要类的2个唯一变量,它们是整个项目中唯一的静态变量。我怀疑在这种情况下是否需要单例或只是静态已经解决了

巴萨拉特

我想知道在这种情况下最佳/正确的选择是什么,

我绝对会推荐静态类方法。

原因

namespace 是仅TypeScript功能,许多开箱即用的工具(例如Create React App)不支持。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

单例类静态变量每次设置为nil

来自分类Dev

我在单例类中需要静态变量吗?

来自分类Dev

带有新分配的静态变量的C ++单例

来自分类Dev

带有局部静态变量的单例构造函数

来自分类Dev

单例类还是仅具有静态字段的类?

来自分类Dev

具有打字稿的静态类继承的super等效项

来自分类Dev

swift是否具有类级别的静态变量?

来自分类Dev

Java单例应该使用静态变量吗?

来自分类Dev

具有静态成员实例的单例

来自分类Dev

java.lang.VerifyError-当具有静态变量的类持有对类实例的引用时

来自分类Dev

具有同步功能的单例类和静态同步功能之间有什么区别

来自分类Dev

具有静态成员的类与打字稿中的命名空间/模块之间的差异

来自分类Dev

静态类中的C#单例模式?

来自分类Dev

在具有私有构造函数的类中初始化静态变量

来自分类Dev

将单例实例作为静态字段与getInstance()方法中的静态变量进行比较

来自分类Dev

JavaScript模块模式-私有变量与静态变量

来自分类Dev

打字稿中的静态类

来自分类Dev

设置变量后是否具有查找静态变量?

来自分类Dev

C ++ 11单例。静态变量是线程安全的吗?为什么?

来自分类Dev

如何在打字稿声明文件中定义单例javascript类

来自分类Dev

vala是否具有函数静态变量?

来自分类Dev

获取类的所有静态变量而无需反射

来自分类Dev

设计模式:具有设置功能的单例

来自分类Dev

具有单例和工厂模式的Nullpointer

来自分类Dev

单例模式语法错误静态字段未命名非静态数据成员或基类

来自分类Dev

打字稿:具有状态的类的导出实例

来自分类Dev

具有 ThreadLocal 变量行为的单例 bean

来自分类Dev

打字稿:自引用静态类成员

来自分类Dev

使用类的静态成员打字稿

Related 相关文章

  1. 1

    单例类静态变量每次设置为nil

  2. 2

    我在单例类中需要静态变量吗?

  3. 3

    带有新分配的静态变量的C ++单例

  4. 4

    带有局部静态变量的单例构造函数

  5. 5

    单例类还是仅具有静态字段的类?

  6. 6

    具有打字稿的静态类继承的super等效项

  7. 7

    swift是否具有类级别的静态变量?

  8. 8

    Java单例应该使用静态变量吗?

  9. 9

    具有静态成员实例的单例

  10. 10

    java.lang.VerifyError-当具有静态变量的类持有对类实例的引用时

  11. 11

    具有同步功能的单例类和静态同步功能之间有什么区别

  12. 12

    具有静态成员的类与打字稿中的命名空间/模块之间的差异

  13. 13

    静态类中的C#单例模式?

  14. 14

    在具有私有构造函数的类中初始化静态变量

  15. 15

    将单例实例作为静态字段与getInstance()方法中的静态变量进行比较

  16. 16

    JavaScript模块模式-私有变量与静态变量

  17. 17

    打字稿中的静态类

  18. 18

    设置变量后是否具有查找静态变量?

  19. 19

    C ++ 11单例。静态变量是线程安全的吗?为什么?

  20. 20

    如何在打字稿声明文件中定义单例javascript类

  21. 21

    vala是否具有函数静态变量?

  22. 22

    获取类的所有静态变量而无需反射

  23. 23

    设计模式:具有设置功能的单例

  24. 24

    具有单例和工厂模式的Nullpointer

  25. 25

    单例模式语法错误静态字段未命名非静态数据成员或基类

  26. 26

    打字稿:具有状态的类的导出实例

  27. 27

    具有 ThreadLocal 变量行为的单例 bean

  28. 28

    打字稿:自引用静态类成员

  29. 29

    使用类的静态成员打字稿

热门标签

归档