Каков наилучший способ приведения параметра action
в редукторном редукторе с машинописью? Будет несколько интерфейсов действий, которые могут расширять базовый интерфейс с типом свойства. Расширенные интерфейсы действий могут иметь больше свойств, которые различаются между интерфейсами действий. Вот пример ниже:
interface IAction {
type: string
}
interface IActionA extends IAction {
a: string
}
interface IActionB extends IAction {
b: string
}
const reducer = (action: IAction) {
switch (action.type) {
case 'a':
return console.info('action a: ', action.a) // property 'a' does not exists on type IAction
case 'b':
return console.info('action b: ', action.b) // property 'b' does not exists on type IAction
}
}
Проблема заключается в том, что action
должно быть приведено к типу, который имеет доступ к IActionA
и IActionB
чтобы редуктор мог использовать как action.a
и action.a
не action.a
ошибку.
У меня есть несколько идей, как обойти эту проблему:
- Cast
action
наany
. - Используйте дополнительные элементы интерфейса.
пример:
interface IAction {
type: string
a?: string
b?: string
}
- Используйте разные редукторы для каждого типа действия.
Каков наилучший способ организовать Action/Reducers в машинописи? Заранее спасибо!