考虑到以下内容:
type EventType = "TYPE A" | "TYPE B";
我想输入一个数组,这样它只能有TYPE A
或TYPE 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 = []
操场上联系