typescript - Tipos de datos condicionales en tipos de datos unión
Suponga que tiene los siguientes tipos:
type Foo = {
prop1: 'foo',
prop2: null
}
type Bar = {
prop1: 'bar',
prop2: number
}
type FooOrBar = Foo | Bar
¿Es posible reescribir el código anterior usando tipos condicionales?
He intentado lo siguiente:
type FooOrBar = {
prop1: 'foo' | 'bar'
prop2: FooOrBar['prop1'] extends 'foo' ? null : number
}
Pero al intentar declarar una variable así:
const sample1: FooOrBar = {
prop1: 'foo',
prop2: null
}
Recibo el siguiente error:
El tipo 'null' no se puede asignar al tipo 'number'.
Parece que FooOrBar['prop1'] extends 'foo' siempre es false, lo cual no debería ser así ya que FooOrBar['prop1'] es un tipo unión de 'foo' | 'bar'
¿Qué estoy haciendo mal?
Respuesta #1
Podrías hacer eso, pero aún necesitarías proporcionar el argumento de tipo explícitamente.
type FooOrBar<T extends 'foo' | 'bar'> = {
prop1: T;
prop2: T extends 'foo' ? null : number;
}
const test: FooOrBar<'foo'> = {
prop1: 'foo',
prop2: null,
}
