联合数据类型的条件数据类型
Conditional data types on union data types
假设您有以下类型:
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
}
我收到以下错误:
Type 'null' is not assignable to type 'number'.
似乎 FooOrBar['prop1'] extends 'foo'
总是 false
,但不应该是因为 FooOrBar['prop1']
是 'foo' | 'bar'
的联合类型
我做错了什么?
您可以这样做,但您仍然需要明确提供类型参数。
type FooOrBar<T extends 'foo' | 'bar'> = {
prop1: T;
prop2: T extends 'foo' ? null : number;
}
const test: FooOrBar<'foo'> = {
prop1: 'foo',
prop2: null,
}
假设您有以下类型:
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
}
我收到以下错误:
Type 'null' is not assignable to type 'number'.
似乎 FooOrBar['prop1'] extends 'foo'
总是 false
,但不应该是因为 FooOrBar['prop1']
是 'foo' | 'bar'
我做错了什么?
您可以这样做,但您仍然需要明确提供类型参数。
type FooOrBar<T extends 'foo' | 'bar'> = {
prop1: T;
prop2: T extends 'foo' ? null : number;
}
const test: FooOrBar<'foo'> = {
prop1: 'foo',
prop2: null,
}