Javascript 多态和非多态类型的并集
Flow预测多态性的方式真的让我头疼。来证明我遇到的麻烦 我希望下面的代码会抛出一个错误,因为Javascript 多态和非多态类型的并集,javascript,reactjs,polymorphism,flowtype,Javascript,Reactjs,Polymorphism,Flowtype,Flow预测多态性的方式真的让我头疼。来证明我遇到的麻烦 我希望下面的代码会抛出一个错误,因为myPolymorphicAction.payload.key的类型不正确。相反,它被操作所扼杀,而不是多态类型 Flow在这里能分辨出区别吗 /* @flow */ type normalAction = { type: string, payload?: any, } type polymorphicAction <P: *> = { type: string,
myPolymorphicAction.payload.key
的类型不正确。相反,它被操作
所扼杀,而不是多态类型
Flow在这里能分辨出区别吗
/* @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`
/*@flow*/
类型normalAction={
类型:字符串,
有效载荷?:任何,
}
类型多态性={
类型:字符串,
有效载荷:P,
}
类型作用=多态性|正常作用;
常量myAction:操作={
输入:“你好”,
有效载荷:{key:“World”}
};
常量my多态性:操作={
输入:“你好”,
有效载荷:{key:“World”}
}
类型myActionPayloadType={
钥匙:号码
}
//流量输出//
20:const myPolymorphicAction:action={
^对象文字。应为多态类型,而不是
20:const myPolymorphicAction:action={
^类型`动作`
期望多态类型
表示您正在对非多态类型使用
。因为您的操作是
type action = polymorphicAction<*> | normalAction;
然后
const myAction: action<*> = {
// ...
const myPolymorphicAction: action<myActionPayloadType> = {
const myAction:action={
// ...
常量my多态性:操作={
这将使Flow停止抛出您得到的错误,但这仍然不会导致它在您的“Hello”
字符串上出错,因为您的操作具有|normalAction
,并且normalAction
仍然具有有效负载?:any,
,这将允许任何有效负载
const myAction: action<*> = {
// ...
const myPolymorphicAction: action<myActionPayloadType> = {