尽管在 environment.d.ts 中,打字稿仍将 process.env 变量识别为未定义

Posted

技术标签:

【中文标题】尽管在 environment.d.ts 中,打字稿仍将 process.env 变量识别为未定义【英文标题】:Typescript recognizing process.env variables as undefined despite being in environment.d.ts 【发布时间】:2021-10-28 05:23:22 【问题描述】:

我的印象是,将环境变量添加到 environment.d.ts 将确保它们具有正确的类型。

我有 @types/node 作为开发依赖项,并且有一个 environment.d.ts 包含以下内容

declare global 
  namespace NodeJS 
    interface ProcessEnv 
      DATABASE_URL: string;
    
  


export ;

但是,当我尝试使用 DATABASE_URL 时,例如在

import PgPromise from "pg-promise";
const db = PgPromise()(process.env.DATABASE_URL || "");

我仍然收到错误

error TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 'string | IConnectionParameters<IClient>'.
Type 'undefined' is not assignable to type 'string | IConnectionParameters<IClient>'.

有什么方法可以确保 DATABASE_URL 是字符串类型,而不是字符串 |不明确的?我错过了什么吗?

【问题讨论】:

请edit您的问题表明您在哪里使用该值。你总是可以使用as string 来说服 TypeScript 它是一个字符串,参见this answer 到using process.env in TypeScript 刚刚编辑了问题以显示我在哪里使用该值! 对于任何阅读的人,很抱歉我没有在我的问题中包含更多细节。试图将其限制为相关的内容,但似乎我也忽略了错误的实际原因。 【参考方案1】:

错误来自我使用 ts-node 的事实。

我使用的是 nodemon / ts-node,而 ts-node 使用 files / include / exclude 来确定要监视的文件。因为我没有指定这些,所以它无法检测到我的文件。

我通过添加修复它


  ...,
  "ts-node": 
    "files": true
  ,
  "include": ["src/**/*.ts", "environment.d.ts"]

到我的 tsconfig.json

【讨论】:

以上是关于尽管在 environment.d.ts 中,打字稿仍将 process.env 变量识别为未定义的主要内容,如果未能解决你的问题,请参考以下文章

打字稿 onChange 事件类型

无法重新声明块范围变量

打字不显示选字框怎么办

wps文字一打字就跳出工具窗口

如何在打字稿中使用 C# 字典?

打字稿打字,打字文件夹是啥