基于环境引用导入的对象

时间:2019-10-05 14:53:15

标签: node.js typescript

在我的TypeScript节点应用程序中,我希望引用与我的NODE_ENV变量匹配的导出对象。

config.ts

const test: { [index: string]: any } = {
    param1: "x",
    param2: {
        name: "John"
    }
}
const dev: { [index: string]: any } = {
    param1: "y",
    param2: {
        name: "Mary"
    }
}
export { test, dev }

main.ts

const environment = process.env.NODE_ENV || "development";
import * as config from "./config.ts";
const envConfig = config[environment]; //gives error Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'typeof import("/path_to_config.ts")'.ts(7053)

2 个答案:

答案 0 :(得分:1)

只需使隐式any明确:

const envConfig: any = (config as any)[environment];

当您尝试通过['propertyName']而不是.propertyName访问对象的属性时,通常会出现此错误,因为在许多情况下,这种形式会绕过TypeScript的类型检查。

答案 1 :(得分:1)

通过定义一个受所有可能值限制的类型(可以从config.tsx导出),您可以比any做得更好。

type configType ='test' | 'dev'

const envConfig = config[environment as configType];