Como digitar ações Redux e redutores Redux no TypeScript?

Qual é a melhor maneira de transmitir oaction parâmetro em um reduxredutor com texto datilografado? Pode haver várias interfaces de ação que podem estender uma interface base com um tipo de propriedade. As interfaces de ação estendidas podem ter mais propriedades diferentes entre as interfaces de ação. Aqui está um exemplo abaixo:

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         
    }
}

O problema é queaction precisa ser convertido como um tipo que tenha acesso a ambosIActionA eIActionB para que o redutor possa usar ambosaction.a eaction.a sem lançar um erro.

Tenho várias idéias de como solucionar esse problema:

Fundidaaction paraany.Use membros opcionais da interface.

exemplo:

interface IAction {
    type: string
    a?: string
    b?: string
}
Use redutores diferentes para cada tipo de ação.

Qual é a melhor maneira de organizar os Action / Reducers em texto datilografado? Agradeço antecipadamente!

questionAnswers(18)

yourAnswerToTheQuestion