Для следующего сценария:
type Action =
| { type: 'FOO' }
| { type: 'BAR' }
type Rule = {
target: string | string[],
consequence: (action:Action) => void
}
const rule1:Rule = {
target: 'FOO',
consequence: action => console.log(action) // { type: 'FOO' }
}
const rule2:Rule = {
target: ['FOO', 'BAR'],
consequence: action => console.log(action) // { type: 'FOO' } | { type: 'BAR' }
}
Действие может быть отправлено (например, с помощью redux), и правило может на него реагировать. Когда цель соответствует action.type , то последствие выполняется с соответствующим действием.
The Question
Я хочу, чтобы правила последствие выводит правильный тип. Это можно как-то сделать с помощью target . Но я не знаю как. Мой текущий подход:
type Rule<Action> = {
target: string | string[],
consequence: (action:Action) => void
}
const rule:Rule<{ type: 'FOO' }> = ...
Но мне нужен способ, в котором я могу написать
const rule:Rule<{ type: 'FOO' } | { type: 'BAR' }> = ...
, и правильный тип будет определен правилами target