Typescript - Express允许在类型级别进行数组组合



考虑到以下内容:

type EventType = "TYPE A" | "TYPE B";

我想输入一个数组,这样它只能有TYPE ATYPE B或两者。

我可以输入EventType[],但这允许重复

type Test = EventType[]
const eventTypes:Test = ["TYPE A", "TYPE B", "TYPE B", "TYPE A"]

我可以显式地列出可用的选项,但是当您有两个以上的选项时,这很快就会崩溃

type Test = ["TYPE A"] | ["TYPE B"] | ["TYPE A", "TYPE B"];
// compiler error
const eventTypes:Test = ["TYPE A", "TYPE B", "TYPE B", "TYPE A"]

在typescript中是否有在类型级别表达这一点而不显式枚举所有选项?

可以这样做

const eventTypes = ["TYPE A", "TYPE B"] as const
type Test = [typeof eventTypes[number]] | typeof eventTypes
const onlyA: Test = ["TYPE A"]
const onlyB: Test = ["TYPE B"]
const all: Test = ["TYPE A", "TYPE B"]
// compiler errors
const duplicate: Test = ["TYPE A", "TYPE A"]
const emptyArray: Test = []

操场上联系

最新更新