Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.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 Can';t将类型设置为数组<;字符串>;in-flow js_Javascript_Reactjs_Visual Studio Code_Flowtype - Fatal编程技术网

Javascript Can';t将类型设置为数组<;字符串>;in-flow js

Javascript Can';t将类型设置为数组<;字符串>;in-flow js,javascript,reactjs,visual-studio-code,flowtype,Javascript,Reactjs,Visual Studio Code,Flowtype,我在函数getRowData最后一行之前的一行中遇到以下错误: 消息:“无法使用绑定到数据的el.arr调用getRow,因为: 未知类型[1]的属性arr与数组不兼容 类型[2]。或未知类型[1]的属性arr与不兼容 字符串[3]。(参考文献:[1][2][3]),地址:'60,44'来源:'flow' 代码:“未定义” 只有将type UserProps中的数组更改为数组时,此错误才会消失,但我希望保留字符串数组 我不明白为什么我会犯这个错误。我明确地将data.audio和data.cha

我在函数getRowData最后一行之前的一行中遇到以下错误:

消息:“无法使用绑定到
数据的
el.arr
调用
getRow
,因为: 未知类型[1]的属性
arr
与数组不兼容 类型[2]。或未知类型[1]的属性
arr
与不兼容 字符串[3]。(参考文献:[1][2][3]),地址:'60,44'来源:'flow' 代码:“未定义”

只有将
type UserProps
中的
数组更改为
数组
时,此错误才会消失,但我希望保留字符串数组

我不明白为什么我会犯这个错误。我明确地将
data.audio
data.chat
设置为
Array
。任何帮助都将不胜感激

type UserProps = {
  name: string,
  audio: Array<string>,
  chat: Array<string>,
  enableChat: boolean,
  enableAudio: boolean,
  status: string,
};

const getRow = (key, data: string[] | string, style = {}) => {
  const text = Array.isArray(data) ? data.join(", ") : data;
  return (
    <TableRowColumn
      key={`row-${key}`}
      style={{ whiteSpace: "pre-wrap", ...style }}
    >
      {text}
    </TableRowColumn>
  );
};

const getRowData = (data: UserProps) =>
  [
    data.name,
    data.status,
    {
      arr: data.audio,
      style: { color: data.enableAudio ? "green" : "red" }
    },
    { arr: data.chat, style: { color: data.enableChat ? "green" : "red" } }
  ].map(
    (el, i) =>
      el && el.arr && el.style ? getRow(i, el.arr, el.style) : getRow(i, el) // error in el.arr !!!!!
  );
type UserProps={
名称:string,
音频:阵列,
聊天室:数组,
enableChat:boolean,
enableAudio:boolean,
状态:字符串,
};
const getRow=(键,数据:string[]| string,style={})=>{
const text=Array.isArray(数据)?data.join(“,”):数据;
返回(
{text}
);
};
const getRowData=(数据:UserProps)=>
[
data.name,
数据。状态,
{
arr:data.audio,
样式:{color:data.enableAudio?“绿色”:“红色”}
},
{arr:data.chat,样式:{color:data.enableChat?“绿色”:“红色”}
].地图(
(el,i)=>
el&&el.arr&&el.style?getRow(i,el.arr,el.style):getRow(i,el)//el.arr中有错误!!!!!
);

getDataRow
没有带注释的返回类型,因此它由返回值暗示,返回值是由字符串、字符串、对象、对象组成的数组,然后通过
map
(返回与输入相同的类型)传递<因此,
map
回调中的code>el
string | object

流无法确定
arr
是字符串还是对象的属性。它可能是未定义的(我发现flow对复合逻辑测试的解释有问题,就像你在
el&&el.arr&&el.style
中所做的那样。如果你将它们拼写为
If
语句,它们会按预期工作,但是逻辑
&
|
似乎有问题)

因此,flow认为
el.arr
getRow
的第二个参数不兼容,后者需要
string[]| string

在访问属性之前,您需要确定
el
的类型,以使flow愉快。测试成员
arr
style
的存在性并不能做到这一点(尽管如果您的类型是可延展的,您可能希望将不相交的并集视为实现这一点的一种方法,但我认为在这种情况下这不起作用,因为您别无选择,只能使用
string
的股票定义)


作为旁注,虽然速记数组语法(
{type}[]
)很方便,但在
的作用域变小之前,它可能会与可选值或可能的值混淆。因此,我选择了使用longhand
Array
语法。文档中有更多关于这个主题的内容。

getDataRow
没有带注释的返回类型,因此它由返回值暗示,返回值是一个由字符串、字符串、对象、对象组成的数组,然后通过
map
(返回与输入相同的类型)<因此,
map
回调中的code>el
string | object

流无法确定
arr
是字符串还是对象的属性。它可能是未定义的(我发现flow对复合逻辑测试的解释有问题,就像你在
el&&el.arr&&el.style
中所做的那样。如果你将它们拼写为
If
语句,它们会按预期工作,但是逻辑
&
|
似乎有问题)

因此,flow认为
el.arr
getRow
的第二个参数不兼容,后者需要
string[]| string

在访问属性之前,您需要确定
el
的类型,以使flow愉快。测试成员
arr
style
的存在性并不能做到这一点(尽管如果您的类型是可延展的,您可能希望将不相交的并集视为实现这一点的一种方法,但我认为在这种情况下这不起作用,因为您别无选择,只能使用
string
的股票定义)


作为旁注,虽然速记数组语法(
{type}[]
)很方便,但在
的作用域变小之前,它可能会与可选值或可能的值混淆。因此,我选择了使用longhand
Array
语法。文档中有更多关于这个主题的内容。

错误有点让人困惑,但问题是flow无法细化
el
类型。您可以做的是稍微更改细化:

typeof el === 'string' ? getRow(i, el) : getRow(i, el.arr, el.style)

您可以试试它。

错误有点混乱,但问题是flow无法细化
el
类型。您可以做的是稍微更改细化:

typeof el === 'string' ? getRow(i, el) : getRow(i, el.arr, el.style)

你可以试试这个新问题,但是:
Array
是否等于
string[]
?是的,与string[]的错误相同新手问题,但是:
Array
是否等于
string[]
?是的,与string[]的错误相同