需要JSON文件并强制转换为接口以验证是否存在所有字段

时间:2019-02-19 09:50:38

标签: typescript

我正在尝试使用require()读取json文件,并且如果我正在读取的文件不具有界面。

这就是我要尝试的:

export interface Config {
    userAgent: string
    refreshToken: string
    clientId: string
}

export class ConfigLoader {
    config: Config

    constructor() {
        try {
            this.config = require('../config.json') as Config
        } catch(ex) {
            console.log(ex)
        }
    }
}

我的想法是,如果config.json文件没有在接口中指定所有三个键,则对Config的强制转换将失败,我可以捕获它并使用默认值或其他内容。但是require可以正常工作,而我最终得到的是缺少键的配置对象。

如何验证我的config.jsonConfig的有效实例?

1 个答案:

答案 0 :(得分:1)

如果您的配置在运行时不是动态的。您可以使用import而不是require来加载具有正确类型的JSON,然后针对接口进行验证:

import * as rawConfig from './config.json'

export interface Config {
  userAgent: string
  refreshToken: string
  clientId: string
}

export const config: Config = rawConfig

要记住的一件事是,由于TypeScript是按结构键入的,因此它不会检测config.json是否具有比接口中指定的字段更多的字段。