首页 > 解决方案 > 需要 JSON 文件并转换为接口以验证所有字段是否存在

问题描述

我正在尝试使用 读取 json 文件require(),如果我正在读取的文件没有接口所需的所有字段,我想将其转换为一个类型并让转换失败。

这是我正在尝试的:

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 工作正常,我最终得到一个缺少键的配置对象。

如何验证 myconfig.json是 的有效实例Config

标签: typescript

解决方案


如果您的配置在运行时不是动态的。您可以使用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 的字段是否比接口中指定的字段多。


推荐阅读