Reactjs 类型为'的参数;字符串|未定义';不可分配给类型为';字符串';。类型';未定义';不可分配给类型';字符串';
我有一个TypeScript中的字典数组,如下所示:Reactjs 类型为'的参数;字符串|未定义';不可分配给类型为';字符串';。类型';未定义';不可分配给类型';字符串';,reactjs,typescript,Reactjs,Typescript,我有一个TypeScript中的字典数组,如下所示: const dict = [ { name: "Lorem", prop: "sit" }, { name: "Ipsum", prop: "amet" }, { name: "Dolor", prop: "consectetur" } ]; let property = dict.find(
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,抱歉。这是我这边的一个愚蠢的错误。不过谢谢你。这对我有帮助。