假设您有以下类型:
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'
我究竟做错了什么?
您可以这样做,但您仍然需要显式提供类型参数。
type FooOrBar<T extends 'foo' | 'bar'> = {
prop1: T;
prop2: T extends 'foo' ? null : number;
}
const test: FooOrBar<'foo'> = {
prop1: 'foo',
prop2: null,
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)