Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json TypeScript可选的联合类型_Json_Typescript_Union Types_Optional Typing - Fatal编程技术网

Json TypeScript可选的联合类型

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

我正在导入一个config.json文件,并尝试从中键入输出。我的应用程序将在函数中与正确的环境联合
默认值
,并返回该值。如果传入无效或未定义的环境,则只返回
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