【问题标题】:Typescript Type for Array of Objects with different Types具有不同类型的对象数组的打字稿类型
【发布时间】:2021-08-19 14:10:59
【问题描述】:

我正在尝试为包含对象但类型不同的数组编写类型。

[
        {
            "id": "test",
            "answer": "1"
        },
        {
            "id": "test_multi",
            "answers": [
                {
                    "id": "skill_1"
                },
                {
                    "id": "skill_2"
                }
            ]
        },
]

我的第一个方法是:

prop: { id: string; answer: string | boolean | { id: string; answers: { id: string }[]} }[];

我想在这种情况下我将不同的对象分配给 answer 道具。

下一个方法

    { id: string; answer: string | boolean;  } | { id: string; answers: { id: string }[] }[];

但在这种情况下,我想我不允许数组被第一种类型的对象填充。

我怎样才能写出“这个数组可以包含这个对象和/或这个对象”的类型?

【问题讨论】:

  • 您的第二种方法很接近,只需从开头使用括号( ... ) 直到[]
  • 或Array<Foo | Bar>

标签: arrays typescript object


【解决方案1】:

你可以像这样使用括号:

({ id: string; answer: string | boolean;  } | { id: string; answers: { id: string }[] })[];

【讨论】:

  • 哇哦!!谢谢!! P.s.:我要等9分钟才能接受你的回答
  • 我还建议添加接口或类型别名,这很笨拙。
  • @PaulB 我相信你已经等了超过 9 分钟 ? 无论如何,我很高兴它帮助了你。作为 H.B.说,把它分解成类型别名或接口是个好主意
【解决方案2】:

我建议您更改输入。很难使用“answer”/“answer”的不同变体。

你可以做这样的事情:

type Answer = string | boolean;
interface TestItem {
    id: string;
    answer?: Answer | Array<TestItem>;
}

const results: TestItem[] = [
        {
            "id": "test",
            "answer": "1"
        },
        {
            "id": "test_multi",
            "answer": [
                {
                    "id": "skill_1"
                },
                {
                    "id": "skill_2"
                }
            ]
        },
]

如果您想保留“答案”,请尝试以下操作:

type Answer = string | boolean;
interface TestItem {
    id: string;
    answer?: Answer;
    answers?: Array<TestItem>;
}

const results: TestItem[] = [
        {
            "id": "test",
            "answer": "1"
        },
        {
            "id": "test_multi",
            "answers": [
                {
                    "id": "skill_1"
                },
                {
                    "id": "skill_2"
                }
            ]
        },
]

【讨论】:

    猜你喜欢
    • 2016-08-03
    • 2019-03-22
    • 1970-01-01
    • 2018-11-03
    • 2020-04-19
    • 1970-01-01
    • 2022-01-05
    • 2016-10-03
    • 2022-01-23
    相关资源
    最近更新 更多