【问题标题】:How to augment process.env in TypeScript?如何在 TypeScript 中增加 process.env?
【发布时间】:2018-04-11 01:12:30
【问题描述】:

process.env 属于 ProcessEnv 类型,定义如下:

export interface ProcessEnv {
    [key: string]: string | undefined;
}

我想扩充这个 TypeScript 界面,使其包含特定于我的应用程序的键,因此结果类似于:

export interface ProcessEnv {
    MY_VARIABLE_1: string;
    MY_OTHER_VARIABLE: string;
    [key: string]: string | undefined;
}

我找不到实现它的方法,我猜它会是 declare moduledeclare namespace 某个地方,但找不到实现此目的的具体方法。

【问题讨论】:

  • 你为什么需要这样的打字?用于自动完成或验证?对于自动完成,您的示例应该可以正常工作。为了验证 - 您的额外文件不会使 [key:string]:string 更具体。
  • 用于自动补全。 (增强只能添加到接口,不能从中删除,因此索引器将始终存在。)
  • 那么你的问题是什么?如何从第三方库重新定义类型?您是否尝试过使用 as ?或者您想要更清洁的解决方案?
  • 问题是如何编写增强(我猜是declare namespace ...),以便当我执行process.env. 时,IDE 会建议我的自定义变量。

标签: node.js typescript typescript-typings


【解决方案1】:

如果您想从 process.env 声明中删除 [key: string]: string | undefined 索引器,从而将 env 的使用限制为显式声明的名称,您可以将 process 声明为变量:

declare var process : {
  env: {
    NODE_ENV: string
  }
}

【讨论】:

  • 我需要在哪里做这个?
【解决方案2】:

ProcessEnv 必须在namespace NodeJS 内,不需要声明[key: string]: string | undefined;,它继承自初始的ProccessEnv

declare namespace NodeJS {
  export interface ProcessEnv {
    MY_VARIABLE_1: string;
    MY_OTHER_VARIABLE: string;
  }
}

【讨论】:

  • 有没有办法删除[key: string]: string | undefined 索引器?这对我来说太宽容了;我仍然可以胖手指一些东西。
  • 如果不删除默认声明 ([key: string]: string | undefined),那么扩展 process.env 就没有意义。 (1) 您添加到process.env 但未声明的任何内容都将被接受 (string: string) 和 (2) 您声明的任何内容都必须是 string,否则它将与 [key: string]: string | undefined 规则冲突。此外,即使没有 Typescript,您添加到 process.env 的任何内容都将输入 string。结论:不要担心扩展process.env,只需确保在代码中记录并包含变量 - 当前的类型声明很好。
  • 您可以从原始 .d.ts 中删除 [key:string](不推荐,但一种选择)。但比这更好的是,我所做的是 JSDoc 真正的变量,这样至少您可以通过将鼠标悬停并查看其描述来确认您使用的是正确的东西。
猜你喜欢
  • 2017-12-24
  • 1970-01-01
  • 2020-01-09
  • 2019-09-16
  • 2016-12-07
  • 1970-01-01
  • 2022-08-09
  • 2014-08-26
  • 2012-12-29
相关资源
最近更新 更多