尽管在 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 变量识别为未定义的主要内容,如果未能解决你的问题,请参考以下文章