typescript 根据不同属性的存在来区分类型?

f0brbegy  于 2023-05-01  发布在  TypeScript
关注(0)|答案(1)|浏览(155)

我是一个typescript(以及js)新手,并且被一系列作者的建模所困。
如果author属性的值是一个数组对象,我需要:
1.允许这些对象具有个人名称属性(family/given),或者简单地“name”(对于组织等)。
1.允许一个可选的“位置”属性(对于发布者和组织作者)。
1.使用typescript-json-schema自动导出到JSON Schema,并加载JSON并使其正确类型化,这样我就可以获得关联的方法。
我可以在Reference类上这样做:

@Type(() => Agent, {
    discriminator: {
      property: 'type',
      subTypes: [
        { value: Organization, name: 'organization' },
        { value: Person, name: 'person' },
      ],
    },
  })
  author?: (Organization|Person)[];

......这是可行的:

Reference {
    id: "un",
    type: "article",
    author: [ Organization { name: "United Nations" } ],
    title: "The Title",
    issued: "2020"
  }

但是它有一个限制,它迫使我在JSON输入数据中包含一个type属性来进行区分,如果可能的话,我宁愿避免这种情况。毕竟,我知道如果有familyname属性,它就是Person
还有更好的选择吗?

1mrurvl1

1mrurvl11#

如果我理解正确的话,你正在尝试将TypeScript对象导出到JSON文件/对象中。如果是这样的话,你可以使用JSON。stringify()方法它将作为参数给出的对象或列表转换为JSON字符串,然后您可以根据需要保存到文件中。为了导入文件/对象,您可以使用JSON。parse()返回一个对象。默认情况下,这个对象是any,所以你需要实现一个方法来检查它的类型。这个link可以帮助你实现它。

相关问题