首页 > 解决方案 > 从类型联合创建唯一数组项的联合(打字稿)

问题描述

我想问一下,是否可以从这些类型的联合中声明一个唯一类型的数组?

我有这种类型Value

type Value = string | number

然后我创建了Values这样的类型:

type Values = Value[]

但这会创建一个类型:

type Values = (string|number)[]

但是我怎样才能从类型中实现这一点Value

type Values = string[] | number[]

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

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

那么有没有办法Values从 type 创建 type Value

我创建了这个示例沙箱只是为了比较这些类型。

感谢您的任何意见!

标签: arraystypescripttypes

解决方案


我会选择受限模板

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,
];

推荐阅读