【发布时间】:2021-11-26 23:00:55
【问题描述】:
我想要一个类型来确保对象的类型为A 或B 或A and B。但是,我认为应该失败的情况之一不是。我确定这很愚蠢,我只是还看不到它。
interface ValueSelector
{
type: "id" | "value_string"
value: string
}
interface TemporalSelector
{
id: number
}
type Selector = (ValueSelector & TemporalSelector) | ValueSelector | TemporalSelector
// Should error
const e0: Selector = {}
const e1: Selector = { id: 0, value: "" } // <-- does not error
const e2: Selector = { type: "id" }
const e3: Selector = { type: "value_string" }
const e4: Selector = { value: "" }
const e5: Selector = { value: "" }
// Should pass
const a1: Selector = { id: 0 }
const a2: Selector = { type: "id", value: "" }
const a3: Selector = { type: "value_string", value: "" }
const a4: Selector = { id: 0, type: "id", value: "" }
const a5: Selector = { id: 0, type: "value_string", value: "" }
【问题讨论】:
标签: typescript discriminated-union union-types