TypeScript可选联合类型

时间:2019-05-16 17:47:45

标签: json typescript union-types optional-typing

我正在导入config.json文件,并试图从中键入输出。我的应用程序会将[hidden first_name] [hidden last_name] 与函数中的正确环境结合起来并返回。如果传入了无效或不确定的环境,则只会返回default的配置。

这是一个示例config.json文件:

default

这是为我们的实例获取特定配置的函数。

{
  "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"
  }
}

更新1

我认为这里的窍门是在其他选项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; } 中添加一个空对象类型。这将使其不指定任何其他属性。

{}

但是,尝试访问export type EnvironmentConfig = typeof config.default & ({} | typeof config.dev | typeof config.uat | typeof config.prod);

时不存在此错误

0 个答案:

没有答案