【发布时间】:2019-07-28 20:24:28
【问题描述】:
在@types/node 中,NodeJS.ProcessEnv 接口使用索引器声明:
interface ProcessEnv {
[key: string]: string | undefined;
}
我正在用我定义的属性来扩充它:
declare module NodeJS {
interface ProcessEnv {
NODE_ENV: 'development' | 'production';
}
}
它成功地检查了process.env.NODE_ENV 的值,但它仍然允许任何属性。如果我使用了错误的属性名称(例如MODE_ENB),它不会产生错误,因为索引器。
有没有办法将模块扩充应用到有效删除索引器的接口?
尝试失败:
[key: string]: never;
NODE_ENV: 'development' | 'production';
错误:“开发”类型的属性“NODE_ENV”| "production"' 不能分配给字符串索引类型'never'.ts(2411)
[key: Exclude<string, 'NODE_ENV'>]: never;
NODE_ENV: 'development' | 'production';
错误:索引签名参数类型不能是类型别名。考虑写 '[key: string]: never' 代替.ts(1336)
【问题讨论】: