Typescript 需要一个JSON文件并转换到接口以验证所有字段是否存在

Typescript 需要一个JSON文件并转换到接口以验证所有字段是否存在,typescript,Typescript,我试图用require读入一个json文件,我想将它转换为一个类型,如果我正在读取的文件没有接口所需的所有字段,则转换失败 以下是我正在尝试的: export interface Config { userAgent: string refreshToken: string clientId: string } export class ConfigLoader { config: Config constructor() { try

我试图用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.json是否是config的有效实例?

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

TypeScript类型在运行时不存在,您需要显式或使用库进行检查。检查以下文章:它与OP已有的有什么不同?它还会高兴地接受你传递给它的任何垃圾吗?@zerkms JSON文件是从2.9开始键入的,因此如果文件字段类型不匹配或缺少字段,这将是编译时错误。哦,这是我完全不知道的,谢谢,我道歉。