How to define Singleton in TypeScript

前端 未结 20 757

What is the best and most convenient way to implement a Singleton pattern for a class in TypeScript? (Both with and without lazy initialisation).

20条回答
  •  心在旅途
    2020-11-28 20:41

    I have found a new version of this that the Typescript compiler is totally okay with, and I think is better because it doesn't require calling a getInstance() method constantly.

    import express, { Application } from 'express';
    
    export class Singleton {
      // Define your props here
      private _express: Application = express();
      private static _instance: Singleton;
    
      constructor() {
        if (Singleton._instance) {
          return Singleton._instance;
        }
    
        // You don't have an instance, so continue
    
        // Remember, to set the _instance property
        Singleton._instance = this;
      }
    }
    

    This does come with a different drawback. If your Singleton does have any properties, then the Typescript compiler will throw a fit unless you initialize them with a value. That's why I included an _express property in my example class because unless you initialize it with a value, even if you assign it later in the constructor, Typescript will think it hasn't been defined. This could be fixed by disabling strict mode, but I prefer not to if possible. There is also another downside to this method I should point out, because the constructor is actually getting called, each time it does another instance is technically created, but not accessible. This could, in theory, cause memory leaks.

提交回复
热议问题