#typescript
#typescript
Вопрос:
Почему typescript не может различать на основе такого общего свойства, как это? После прочтения документов я подумал, что это сработает.
Вот игровая площадка для typescript
type Mammal = { legs: number }
type Fish = { fins: number }
type Action1 = {
type: 'a',
payload: Mammal
}
type Action2 = {
type: 'b',
payload: Fish
}
type ActionUnion = Action1 | Action2
const A: Action1 = { type: 'a', payload: { legs: 4 } }
const B: Action2 = { type: 'b', payload: { fins: 3 } }
function foo(action: ActionUnion) {
switch (action.type) {
case 'a':
const { legs } = action.payload
case 'b':
const { fins } = action.payload
default:
break
}
}
Ответ №1:
Вы забыли разбить оператор case. Должно выглядеть так
case 'a':
const { legs } = action.payload
break;
case 'b':
const { fins } = action.payload
Комментарии:
1. Массивная лицевая ладонь.
2. @hally9k Уже полночь. Вы прощены.
Ответ №2:
Они действительно работают так, но ваш случай переключения переходил к следующему случаю, добавьте a break
, и он будет работать
type Mammal = { legs: number }
type Fish = { fins: number }
type Action1 = {
type: 'a',
payload: Mammal
}
type Action2 = {
type: 'b',
payload: Fish
}
type ActionUnion = Action1 | Action2
const A: Action1 = { type: 'a', payload: { legs: 4 } }
const B: Action2 = { type: 'b', payload: { fins: 3 } }
function foo(action: ActionUnion) {
switch (action.type) {
case 'a':
const { legs } = action.payload
break;
case 'b':
const { fins } = action.payload
break;
default:
break
}
}