Путь потока предполагает, что полиморфизм действительно вызывает у меня головную боль. Here's a minimum example, чтобы продемонстрировать проблемы, которые у меня есть.Союз полиморфных и неполиморфных типов
Я ожидал следующее, чтобы выбросить ошибку, основанную на неправильном типе для myPolymorphicAction.payload.key
. Вместо этого он задыхается от action
, не являясь полиморфным типом.
Может ли поток рассказать о различиях здесь?
/* @flow */
type normalAction = {
type: string,
payload?: any,
}
type polymorphicAction <P: *> = {
type: string,
payload: P,
}
type action = polymorphicAction<*> | normalAction;
const myAction: action = {
type: "Hello",
payload: { key: "World" }
};
const myPolymorphicAction: action<myActionPayloadType> = {
type: "Hello",
payload: { key: "World" }
}
type myActionPayloadType = {
key: number
}
// FLOW OUTPUT //
20: const myPolymorphicAction: action<myActionPayloadType> = {
^ object literal. Expected polymorphic type instead of
20: const myPolymorphicAction: action<myActionPayloadType> = {
^type `action`