联合数据类型上的条件数据类型

假设您具有以下类型:

type Foo = {
    prop1: 'foo',prop2: null
}

type Bar = {
    prop1: 'bar',prop2: number
}

type FooOrBar = Foo | Bar

是否可以使用条件类型重写以上代码?

我尝试了以下操作:

type FooOrBar = {
    prop1: 'foo' | 'bar'
    prop2: FooOrBar['prop1'] extends 'foo' ? null : number
}

但是当试图像这样声明var时:

const sample1: FooOrBar = {
    prop1: 'foo',prop2: null
}

我收到以下错误:

类型'null'不能分配给类型'number'。

FooOrBar['prop1'] extends 'foo'始终是false,这不是应该的,因为FooOrBar['prop1']'foo' | 'bar'的联合类型

我在做什么错了?

iCMS 回答:联合数据类型上的条件数据类型

您可以这样做,但是您仍然需要显式提供type参数。

type FooOrBar<T extends 'foo' | 'bar'> = {
  prop1: T;
  prop2: T extends 'foo' ? null : number;
}

const test: FooOrBar<'foo'> = {
  prop1: 'foo',prop2: null,}
本文链接:https://www.f2er.com/1915725.html

大家都在问