如何在打字稿中定义这个模型

How do define this model in typescript

我有一个 json 模型,看起来像这样

{
    "loggers" : {
        "logger1" : {
            "name" : "logger1",
            "level" : "DEBUG",
            "sub_loggers" :{
                "logger1.nested_logger1" : {
                    "name": "logger1.nested_logger1",
                    "level": "INFO"
                },
                "logger1.nested_logger2" : {
                    "name": "logger1.nested_logger2",
                    "level": "INFO",
                    "sub_loggers": {
                        "logger1.nested_logger2.more_of_that" : {
                            "name": "logger1.nested_logger2.more_of_that",
                            "level": "INFO"
                        }
                    }
                }
            }
        },
        "logger2" : {
            "name": "logger2",
            "level": "WARN"
        }
    }
}

我想在从变量中的 HTTP 请求中收到模型时保存它,但我希望它被映射,所以我不必使用 any

如果有办法把它分成两个模型,我更想要, 我只是不知道如何映射它,因为 sub_loggers 不是数组,它是一个对象,其键名也是它们所代表的记录器的名称。

这是一种选择:

type Level = "DEBUG" | "INFO" | "WARN" | "ERROR";

type Loggers = {
    [name: string]: Logger;
}

interface Logger {
    name: string;
    level: Level;
    sub_loggers?: Loggers;
}

let json = YOUR_JSON as { loggers: Loggers };
let loggers: Loggers = json["loggers"];

(code in playground)


编辑

回答您的评论问题:

  1. 是的,? 标记了 optional property
  2. 我根本没用过类,我用过interfaces and type aliases
    链接文档中解释了接口和类型别名之间的区别。
    我没有使用 类 因为从你的问题看来你只是在寻找代表你的 json 结构以便编译器将使用类型安全。
    如果您需要实际实例以便拥有功能(方法)而不仅仅是数据对象,那么您需要使用 类.