Json TypeScript可选的联合类型
我正在导入一个config.json文件,并尝试从中键入输出。我的应用程序将在函数中与正确的环境联合Json TypeScript可选的联合类型,json,typescript,union-types,optional-typing,Json,Typescript,Union Types,Optional Typing,我正在导入一个config.json文件,并尝试从中键入输出。我的应用程序将在函数中与正确的环境联合默认值,并返回该值。如果传入无效或未定义的环境,则只返回defaultconfig 下面是一个示例config.json文件: { "default" : { "endpoint1": "https://example.com", "endpoint2": "https://example.com" }, "dev" : { "endpoint3": "http
默认值
,并返回该值。如果传入无效或未定义的环境,则只返回default
config
下面是一个示例config.json文件:
{
"default" : {
"endpoint1": "https://example.com",
"endpoint2": "https://example.com"
},
"dev" : {
"endpoint3": "https://example.com",
"api_key":"key"
},
"uat" : {
"endpoint3": "https://example.com",
"api_key":"key"
},
"prod" : {
"endpoint3": "https://example.com",
"api_key":"key"
}
}
下面是为我们的实例获取特定配置的函数
import config from "src/js/config/config.json";
export type Environment = keyof typeof config;
export type EnvironmentConfig = typeof config.default & (typeof config.dev | typeof config.uat | typeof config.prod);
let localConfig: undefined | EnvironmentConfig;
function getForEnv(configJSON: typeof config, env: Environment | null): EnvironmentConfig {
// error thrown here because default does not have types from the specific environments.
// This type should always have default but may also have a specific environment.
localConfig = configJSON.default;
if (env !== null && configJSON[env]) {
localConfig = _.merge(localConfig, configJSON[env]);
}
return localConfig;
}
更新1
我认为这里的诀窍是在附加选项{}
中添加一个空对象类型。这将允许它不指定任何其他属性
export-type-EnvironmentConfig=typeof-config.default&({}| typeof-config.dev | typeof-config.uat | typeof-config.prod)代码>
但是,尝试访问getForEnv(配置,'uat')时不存在此错误。endpoint3