顶级变量和静态变量之间的区别

时间:2020-08-07 18:54:34

标签: typescript typescript-generics deno

我从deno开始TypeScript,并尝试在我的POC之一中使用“静态”,但是它似乎并没有达到我的预期。

有人可以向我们解释为什么在下面的代码中getConn()似乎在从另一个类调用时实例化了一个新连接

import { Store, Id } from "./Store.ts";
import { Redis , connect } from "https://denopkg.com/keroxp/deno-redis/mod.ts";
    
export class RedisStore<T extends Id> extends Store<T>{
  static conn?:Redis;
  name:string;

  constructor(name:string){
    super();
    this.name = name;
  }

  async getConn():Promise<Redis>{
    if(RedisStore.conn == null || RedisStore.conn.isClosed){
      RedisStore.conn = await connect({
        hostname: "127.0.0.1",
        port: 6379
      });
    }   
    return RedisStore.conn;
  }
}

如果我在上课之前声明

const redisconn = await connect({
  hostname: "127.0.0.1",
  port: 6379
});

然后更改

async getConn():Promise<Redis>{ return redisconn }

显然,静态不像我期望的那样工作(就像在C#中一样),但我不知道怎么做。

RedisStore被实例化为一个单例(我尝试了不同的事情)

export class User extends DataObject<UserData> {
      
  static store:Store<UserData>; 

  constructor(){
    super();
    if(!User.store){
      User.store = new RedisStore<UserData>(User.name)
    }
  }
}

很抱歉,这个问题很简单,如果您有任何相关文档,也很高兴与您分享!

0 个答案:

没有答案