typescript - 限制已经存在的 TypeScript 接口 (process.env)
问题描述
我试图ProcessEnv
通过替换它的接口来强类型,因此没有对任意环境变量的索引访问。
我知道它可以扩展
declare namespace NodeJS {
interface ProcessEnv {
var1?: string;
var2?: string;
}
}
但是因为ProcessEnv
它实际上是在 中定义的@types/node/index.d.ts
,所以它仍然像这样维护索引访问器:
declare namespace NodeJS {
interface ProcessEnv {
[key: string]: string | undefined;
var1?: string;
var2?: string;
}
}
如何删除它?甚至可能吗?
process.env.var1 // ok
process.env.var2 // ok
process.env.var3 // not ok, I want it to be an error but it gives a string due to the index accessor
我通常做的是定义一个具有相同定义的新接口,但删除要重新定义的字段,Omit
然后再次添加它......但由于这是一个全局变量,我不能为它使用不同的接口(除非我找到所有的实例process.env
并将其转换为新类型,这是我不想做的)。
解决方案
您可以尝试打开noPropertyAccessFromIndexSignature
标志。虽然它会影响你所有的代码,当然。不仅仅是ProcessEnv
类型:
interface Env {
[k: string]: string | undefined
}
interface Env {
var1: string
var2: string
}
declare const env: Env
env.var1
env.var2
env.var3 // error
看起来 TS 游乐场中有一个错误,它没有在链接中存储编译标志的状态。也许你必须去手动TS Config
打开。noPropertyAccessFromIndexSignature
推荐阅读
- python - 在 c++ 中嵌入 python ,示例
- javascript - 使用 Javascript 日期设置活动类以设置颜色方案?
- html - Cloud9 IDE + Rails 应用程序:CSS 背景图像未显示在 .erb 页面上
- javascript - 根据长度对字符串进行排序
- python - 使用 Datadog 的 Python API,是否可以获取您自己的凭据,如果可以,如何获取?
- firefox-addon-webextensions - 特权代码、chrome 代码、Gecko 到底是什么以及在哪里?
- python - 在数字变量中搜索相同的数字
- amazon-web-services - EC2 - 新实例与(重新挂载)EBS 支持的实例
- r - 在 R 中绘制倍数变化比例
- hadoop - HDP的HDFS复制过程真的很慢