数组第一个元素的可选属性,但其他元素的必需属性

Hou*_*sam 4 typescript

我想为对象数组定义一个接口,其中所有对象都应具有相同的结构,但第一个元素具有可选属性之一。

数组中存储的数据示例如下所示:

const array: Item[] = [{
  value: 'Value1'
},
{
  label: 'Label2',
  value: 'Value2'
},
{
  label: 'Label3',
  value: 'Value3'
},
{
  label: 'Label4',
  value: 'Value4'
}];
Run Code Online (Sandbox Code Playgroud)

我当前的界面如下所示:

interface Item {
  label?: string;
  value: string;
}
Run Code Online (Sandbox Code Playgroud)

这意味着该label属性在数组的所有元素上都是可选的,而我希望它在第一个元素上是可选的,但在其余元素上是强制的。

Fil*_*ský 5

您可以使用可变元组类型(Typescript 4.0+),如下所示:

interface First {
    label?: string;
    value: string;
}

interface Item {
    label: string;
    value: string;
}

type Items = [First, ...Item[]];

const array: Items = [
    {
        value: 'Value1',
    },
    {
        label: 'Label2',
        value: 'Value2',
    },
    {
        label: 'Label3',
        value: 'Value3',
    },
    {
        label: 'Label4',
        value: 'Value4',
    },
];
Run Code Online (Sandbox Code Playgroud)