Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多态和非多态类型的并集_Javascript_Reactjs_Polymorphism_Flowtype - Fatal编程技术网

Javascript 多态和非多态类型的并集

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,

Flow预测多态性的方式真的让我头疼。来证明我遇到的麻烦

我希望下面的代码会抛出一个错误,因为
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> = {