在全局声明打字稿中声明进程变量。d.ts

Declare process var in global declare typescript .d.ts

我知道设置 .env 类型,我们把这段代码写在 .d.ts:

  var process: {
   env: {
      MONGO_DB_URL: string;
    }
  }

但是如果我在全局声明中这样做,就像这样:

declare global {
  var process: {
   env: {
      MONGO_DB_URL: string;
    }
  }
  module Express {
    export interface Request {
      decodedToken: DecodedToken;
    }
    export interface Application {
      io: Server;
      sessionQIDtoSocketMap: Record<string, string>;
    }
  }
}

它给我这个错误:

var process: globalThis.NodeJS.Process
Subsequent variable declarations must have the same type.  Variable 'process' must be of type 'Process', but here has type '{ env: { MONGO_DB_URL: string; }; }'.ts(2403)
globals.d.ts(44, 13): 'process' was also declared here.

如果我这样做:

declare var process: {
  env: {
    MONGO_DB_URL: string;
  };
};
declare global {
  module Express {
    export interface Request {
      decodedToken: DecodedToken;
    }
    export interface Application {
      io: Server;
      sessionQIDtoSocketMap: Record<string, string>;
    }
  }
}

然后错误消失了,但是打字稿仍然没有注册类型

我前一段时间遇到了同样的问题。像这样引用我的 .env 变量解决了我的问题

const MONGODB_URL = process.env["MONGO_DB_URL"];

编辑

这是我最后做的,比我之前的回答稍微好一点。在 globals.d.ts:

declare namespace NodeJS {
  interface ProcessEnv {
   MONGO_DB_URL: string
   //etc...
  }
}

然后像以前一样使用点符号引用 .env 变量。你应该得到 intellisense

当有declare global时,那么代码应该是:

declare global {
  namespace NodeJS {
    export interface ProcessEnv {
      JWT_SECRET: string;
    }
  }
}