根据类型联合(打字稿)创建唯一数组项的联合

时间:2020-06-12 06:43:10

标签: arrays typescript types

我想问一下,是否可以通过这些类型的并声明一个唯一类型的数组?

我有这种类型的Value

type Value = string | number

然后我像这样创建类型Values

type Values = Value[]

但是会创建一个类型:

type Values = (string|number)[]

但是如何从Value类型实现呢?

type Values = string[] | number[]

因为基本上我有一个为表过滤器呈现checkbox-es的函数。该checkbox将始终具有stringnumber作为值。

然后,当您单击复选框时,它将把该值添加到数组中。例如,您有一列firstName,并向该过滤器添加了两个名称。然后它将变成string的数组或number的数组:string[] | number[],它们代表我的类型Values

那么有没有一种方法可以从类型Values创建类型Value

我创建了此示例sandbox只是为了比较这些类型。

谢谢您的输入!

1 个答案:

答案 0 :(得分:0)

我会选择模板受限

type Values<T extends string | number> = T[];

const myArr: Values<string> = [
    'foo',
    'bar',
];

const myArr2: Values<number> = [
    1,
    2,
];

或使用重载类型(让打字稿根据数组内部内容决定类型)

type ValueTypeA = string[];
type ValueTypeB = number[];

type Values = ValueTypeA | ValueTypeB;

const myArr: Values = [
    'foo',
    'bar',
];

const myArr2: Values = [
    1,
    2,
];