Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.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_Flowtype - Fatal编程技术网

Javascript 流类型的奇怪问题

Javascript 流类型的奇怪问题,javascript,reactjs,flowtype,Javascript,Reactjs,Flowtype,在我的React应用程序中,我试图通过Flow的类型检查使所有内容正常工作。我遇到了一个我无法理解的有趣的情况。以下是相关代码: // @flow export const UPDATE_SESSION_PROP: string = 'UPDATE_SESSION_PROP'; // This fails type UserEmailAction = {type: UPDATE_SESSION_PROP, propName: 'currentUs

在我的React应用程序中,我试图通过Flow的类型检查使所有内容正常工作。我遇到了一个我无法理解的有趣的情况。以下是相关代码:

// @flow
export const UPDATE_SESSION_PROP: string = 'UPDATE_SESSION_PROP';

// This fails
type UserEmailAction = {type: UPDATE_SESSION_PROP,
                        propName: 'currentUserEmail',
                        payload: string};

// But this works
type UserEmailAction = {type: 'UPDATE_SESSION_PROP',
                        propName: 'currentUserEmail',
                        payload: string};
流中的错误是:
无法将字符串用作类型,因为字符串是值。要获取值的类型,请使用“typeof”.Flow(推断错误)


上面的两个
type
语句不是等价的吗?

与错误所述类似,不能将值用作类型。你能做的就是这样

export type UPDATE_SESSION_PROP = 'UPDATE_SESSION_PROP';

// This works
type UserEmailAction = {type: UPDATE_SESSION_PROP,
                        propName: 'currentUserEmail',
                        payload: string};
而第二个版本的实施实际上有着不同的含义。如果表示将
'UPDATE\u SESSION\u PROP'
作为
类型的唯一可接受值

//This works becuase `UPDATE_SESSION_PROP` is considered Literal Type
type UserEmailAction = {type: 'UPDATE_SESSION_PROP',
                        propName: 'currentUserEmail',
                        payload: string};

Hmmm,我想这可能就是原因:似乎是流的创建者的疏忽。是的,明白了。这种方法的问题是,我还希望对实际分派使用相同的常量,例如:``分派({type:UPDATE\u SESSION\u PROP,propName:'currentUserEmail',payload:'rob@bob.com' }); ``` 归根结底,类型检查应该是帮助我们开发更好的代码,而不是阻碍我们太多。我可以有一个
UPDATE\u SESSION\u PROP
和一个
UPDATE\u SESSION\u PROP\u TYPE
,但这似乎有些过分了。