【问题标题】:Can I have an Enum of objects?我可以有一个对象的枚举吗?
【发布时间】:2018-09-11 15:12:29
【问题描述】:

我想将枚举(或类型,我不确定术语是否正确)定义为特定对象,如下所示:

enum Notes {
  { subDir: "list", desc: "file contains list" },
  { subDir: "maps", desc: "file contains maps" },
}

即Notes 类型的实例,只能是以下类型,并且具有枚举中定义的上述属性:

interface Descriptor {
  subDir: string;
  desc: string;
}

这是否可能,通过使用枚举或其他方法?

这是我最接近实现我想要的,但是我无法将类型本身视为描述符的实例:

type Notes =
  { subDir: "list", desc: "file contains lists" } |
  { subDir: "map", desc: "file contains maps" };

interface Descriptor {
  subDir: string;
  desc: string;
}

【问题讨论】:

  • 不,枚举是在这里使用的错误构造/类型。我认为您只需要一个数组,可能是全局可访问的,命名为 Notes,其中包含一个或多个符合接口 Descriptor 的实例
  • @Igor 好的,我可以用其他方式完成它吗?

标签: typescript enums


【解决方案1】:

不,枚举是此处使用的错误构造/类型。我认为您只需要一个名为 Notes 的数组,其中包含一个或多个符合接口 Descriptor 的实例

Notes: Descriptor[] = [
    { subDir: "list", desc: "file contains list" },
    { subDir: "maps", desc: "file contains maps" }];

【讨论】:

  • 谢谢,我将如何在另一个界面中的上下文中定义 Notes?具体来说,Notes 的数组,每个元素对应于这些描述符值之一。
【解决方案2】:

您的 Notes 类型在更大的界面中为我工作:

type Notes =
  { subDir: "list", desc: "file contains lists" } |
  { subDir: "map", desc: "file contains maps" };

interface BiggerInterface { 
    notes: Notes[];
}
let b1: BiggerInterface = {
    notes: [  // OK
        { subDir: "list", desc: "file contains lists" },
        { subDir: "map", desc: "file contains maps" },
    ]
};
let b2: BiggerInterface = {
    notes: [  // error
        { subDir: "list", desc: "file contains something else" }
    ]
};

如果这不是您的想法,请澄清问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 2017-03-30
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    相关资源
    最近更新 更多