Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
Reactjs 类型为'的参数;字符串|未定义';不可分配给类型为';字符串';。类型';未定义';不可分配给类型';字符串';_Reactjs_Typescript - Fatal编程技术网

Reactjs 类型为'的参数;字符串|未定义';不可分配给类型为';字符串';。类型';未定义';不可分配给类型';字符串';

Reactjs 类型为'的参数;字符串|未定义';不可分配给类型为';字符串';。类型';未定义';不可分配给类型';字符串';,reactjs,typescript,Reactjs,Typescript,我有一个TypeScript中的字典数组,如下所示: const dict = [ { name: "Lorem", prop: "sit" }, { name: "Ipsum", prop: "amet" }, { name: "Dolor", prop: "consectetur" } ]; let property = dict.find(

我有一个TypeScript中的字典数组,如下所示:

const dict = [
     { name: "Lorem", prop: "sit" },
     { name: "Ipsum", prop: "amet" },
     { name: "Dolor", prop: "consectetur" }
];
let property = dict.find(e => e.name === eventKey);
let name1:string = property.prop!; //Error here
changeProp(name1);
当我尝试通过以下方式动态访问此词典中的对象时:

const handleChange = React.useCallback((eventKey: eventKey) => {
    let property = dict.find(e => e.name === eventKey)?.prop;
    changeProp(property);  //Getting error here
}
请注意,这是动态更改,可以在此处找到演示:

我得到的错误是:

TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
  Type 'undefined' is not assignable to type 'string'.
我试过这样使用它:

const dict = [
     { name: "Lorem", prop: "sit" },
     { name: "Ipsum", prop: "amet" },
     { name: "Dolor", prop: "consectetur" }
];
let property = dict.find(e => e.name === eventKey);
let name1:string = property.prop!; //Error here
changeProp(name1);
现在获得的错误是:
TS2532:对象可能是“未定义的”。

我不知道如何处理这个问题,因为我对打字脚本和反应还不熟悉

const handleChange = React.useCallback((eventKey: eventKey) => {
    let property = dict.find(e => e.name === eventKey)?.prop;
    changeProp(property);  //Getting error here
}
这里,在函数中,当您在dict上查找时,您假设find函数可以返回一个空值
dict.find(e=>e.name==eventKey)?.prop
, 这样,
属性
可以是
未定义的|字符串

尝试以这种方式更新您的函数
dict.find(e=>e.name==eventKey)?.prop | |“
,这意味着如果find没有返回任何值,而不是未定义,那么变量
属性将是
数组方法将从满足条件的数组返回第一个元素。但是当没有找到匹配的元素时,它返回
未定义的

这使得
find
的返回类型成为
您的|元素|类型|未定义
,即
字符串|未定义
(在阅读
find
结果的
prop
之后)

问题
let property=dict.find((e)=>e.name==eventKey)?.prop
//属性将是字符串或未定义
changeProp(财产);
要解决此问题,您需要在函数
changeProp
中接受
string | undefined
,或者提供回退字符串值(空字符串)

解决方案 提供空字符串作为回退值:

let property = dict.find((e) => e.name === eventKey)?.prop ?? ''
changeProp(property);
此外,还可以在编辑器中看到类型:

那么,如果找不到匹配的对象,您希望发生什么?可能会返回默认搜索,就像第一个名为“Lorem”的对象一样。谢谢您的回答。但是,这样,它总是将空值作为默认值。谢谢你的回答。但是,这样一来,它总是将null值作为defaultMy bad,抱歉。这是我这边的一个愚蠢的错误。不过谢谢你。这对我有帮助。