首页 > 解决方案 > 限制已经存在的 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并将其转换为新类型,这是我不想做的)。

标签: typescript

解决方案


您可以尝试打开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


推荐阅读