用导入的接口覆盖整个Typescript接口



所以我想覆盖NodeJS{ProcessENV}接口,这样我们的代码就可以更严格,人们就不能添加可能在服务之间发生冲突的ENV属性。我在共享回购中创建了一个可以导入的接口

IConfigENV {
ENV: string;
PROP: string;
PROP_2: string
}

我看到的问题是ProcessENV extends Dict<string>

所以当我做类似的事情时

declare namespace NodeJS {
export interface ProcessEnv extends IConfigENV {}
}

它将正确地获取显式值,但是它仍然允许从CCD_ 2调用未知属性。我希望它在编译时失败。

我注意到typescript上有一个请求,要求为接口实现一个spread运算符,但看起来它没有实现。

只是想知道是否有人找到了解决这个问题的方法或有任何想法?

TL;DR

不,你不能再限制了。

理论

在typescript中,不能覆盖接口,只能扩展它们,并且NodeJS.ProcessEnv已经是类型

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

因此,您可以明确新属性(它们甚至仍将被迫满足现有约束(。但是,您不能删除这样的语句,即ProcessEnv类型上允许任何字符串,并且它将是字符串类型或未定义类型。

所以我能够想出一个解决方案,即使它不是我想要的,也能达到预期的结果。

const processENV: IConfigENV = process.env;

这将只允许引用接口上定义的任何属性。

最新更新