Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.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 当具有不同类型的结构时,使用TypeScript指定类型_Javascript_Reactjs_Typescript - Fatal编程技术网

Javascript 当具有不同类型的结构时,使用TypeScript指定类型

Javascript 当具有不同类型的结构时,使用TypeScript指定类型,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我对TypeScript有点陌生,我正试图摆脱所有的类型 问题: 在React组件中,我在一个对象数组上循环并提取一个键/值对。组件接收标记、标记键和道具,如下所示: 标记:[{name:Some tag}]或[{platform:{name:Some tag}] 标记键:[名称]或标记键:[平台,名称] 如果在下面运行此脚本,则在控制台中会出现以下错误: 元素隐式具有“any”类型,因为索引表达式不是“number”类型 类型道具={ 标签:任何[]; 标记键:字符串[]; }; const

我对TypeScript有点陌生,我正试图摆脱所有的类型

问题: 在React组件中,我在一个对象数组上循环并提取一个键/值对。组件接收标记、标记键和道具,如下所示:

标记:[{name:Some tag}]或[{platform:{name:Some tag}]

标记键:[名称]或标记键:[平台,名称]

如果在下面运行此脚本,则在控制台中会出现以下错误:

元素隐式具有“any”类型,因为索引表达式不是“number”类型

类型道具={ 标签:任何[]; 标记键:字符串[]; }; const Tags:React.FC={Tags,tagKeys}:PropsWithChildren=>{ const renderTags=:React.ReactNode=>{ return tags.maptag=>{ 设key=; //循环遍历标记数组中的标记键以提取标记 对于let i=0;i key=i==0?tag[tagKeys[i]as any]:key[tagKeys[i]as any]

…脚本正在运行,但我想删除任何类型的脚本

问题: 有没有一种方法可以在不指定收到的道具数组标记外观的情况下设置类型


我希望能够传递具有不同类型结构的数组并提取一个键/值对。

有两个问题需要注意,我们需要弄清楚

首先,你问: 有没有一种方法可以在不指定收到的道具数组标记外观的情况下设置类型? 类型道具={ tags:any[];//这是您直接问题的答案 标记键:字符串[]; }; 其次,在处理了上述问题之后,TypeScript实际上是在抱怨你的索引。 //TypeScript实际上是在警告您这一点。 //请注意,最初,`key`隐式或间接地属于`string`类型 设key=; //在循环中,将'key'指定为'object'类型` key=i==0?标记[tagKeys[i]]:键[tagKeys[i]]; //因此,上面的一行表示'key'可以是'string'或'object'` //因此,TypeScript告诉您。。。 //您的索引键表达式隐式地属于任意类型 要处理该TypeScript错误,请按如下方式更新:

让键:any=;
请进行必要的更新,并让我知道您的情况。

有两个问题需要关注,我们需要弄清楚

首先,你问: 有没有一种方法可以在不指定收到的道具数组标记外观的情况下设置类型? 类型道具={ tags:any[];//这是您直接问题的答案 标记键:字符串[]; }; 其次,在处理了上述问题之后,TypeScript实际上是在抱怨你的索引。 //TypeScript实际上是在警告您这一点。 //请注意,最初,`key`隐式或间接地属于`string`类型 设key=; //在循环中,将'key'指定为'object'类型` key=i==0?标记[tagKeys[i]]:键[tagKeys[i]]; //因此,上面的一行表示'key'可以是'string'或'object'` //因此,TypeScript告诉您。。。 //您的索引键表达式隐式地属于任意类型 要处理该TypeScript错误,请按如下方式更新:

让键:any=; 请进行必要的更新,并让我知道您的情况。

密钥在其生命周期内可以是字符串或对象,因此我的第一直觉是将其声明为:

let key: object | string = "";
但TS对此并不满意,因此我的第二次尝试是:

type NestedObject = { [key: string]: NestedObject } | string
let key: NestedObject = '';

key = { platform: { name: 'dd' } }
key = key.platform.name
但是TS对最后一行也不满意,所以这次我就放弃了:

let key: any = '';
键在其生命周期内可以是字符串或对象,因此我的第一个直觉是将其声明为:

let key: object | string = "";
但TS对此并不满意,因此我的第二次尝试是:

type NestedObject = { [key: string]: NestedObject } | string
let key: NestedObject = '';

key = { platform: { name: 'dd' } }
key = key.platform.name
但是TS对最后一行也不满意,所以这次我就放弃了:

let key: any = '';

let key:数字或let key将不起作用,因为我将得到变量“key”在分配之前使用。就我所知,钥匙从来不是一个数字。如果它没有到达最后一个标记键,它就是一个对象,当它到达最后一个标记键时,它就是一个字符串。哦,好的。在这种情况下,这意味着变量key是一个对象,一个数字,因为您将其重新分配为key=i==。。。最后是一个字符串,因为let key=。请看我的最新答案。它从来不是一个数字。。。三元运算符?:将永远不会对条件的第一个操作数求值。。。即使可以,i==0是一个布尔值,而不是一个数字当我们仔细分析这行时,key=i==0。。。。注意,用户首先重新分配key,换句话说,key=i。然后进入三元运算符@Aprillion,如果不是这样的话,那么让key:object | string=可以工作。但不幸的是,在这种情况下,您要处理的是
通过3种类型变异的变量。因此,我们不能使用简单的联合。是的,@Aprillion,实际上你是对的。键被重新分配给三元运算符的结果。感谢您的澄清。let key:number或let key将不起作用,因为我将得到变量“key”在分配之前被使用。就我所知,钥匙从来不是一个数字。如果它没有到达最后一个标记键,它就是一个对象,当它到达最后一个标记键时,它就是一个字符串。哦,好的。在这种情况下,这意味着变量key是一个对象,一个数字,因为您将其重新分配为key=i==。。。最后是一个字符串,因为let key=。请看我的最新答案。它从来不是一个数字。。。三元运算符?:将永远不会对条件的第一个操作数求值。。。即使可以,i==0是一个布尔值,而不是一个数字当我们仔细分析这行时,key=i==0。。。。注意,用户首先重新分配key,换句话说,key=i。然后进入三元运算符@Aprillion,如果不是这样的话,那么让key:object | string=可以工作。但不幸的是,在本例中,您正在处理一个通过3种类型变异的变量。因此,我们不能使用简单的联合。是的,@Aprillion,实际上你是对的。键被重新分配给三元运算符的结果。感谢您的澄清。您的答案是正确的,键将是字符串或对象。但将其声明为那样会使error元素隐式地具有“any”类型,因为类型为“any”的表达式不能用于索引类型为“string | object”。是的,这是真的。因为在TypeScript中,一旦您事先知道一个变量将采用多种类型。然后建议它显式地声明为任何类型。啊,好吧。。。看起来递归数据结构对TS不友好,所以我确实会在这里使用任何数据结构,在我再次尝试变得聪明之后:@MwamiTovi我不会说这是事先建议的,只有在不可能使用简单的联合类型的情况下,并且您不是一个库作者,您应该尽最大努力找到一个与泛型有关的聪明技巧,以利于它们的使用users@Aprillion我只是这样说,因为我们的同事事先知道变量键会在整个过程中发生变异。事实上,你也是对的,我不是库的作者之一,你是正确的,因为键不是字符串就是对象。但将其声明为那样会使error元素隐式地具有“any”类型,因为类型为“any”的表达式不能用于索引类型为“string | object”。是的,这是真的。因为在TypeScript中,一旦您事先知道一个变量将采用多种类型。然后建议它显式地声明为任何类型。啊,好吧。。。看起来递归数据结构对TS不友好,所以我确实会在这里使用任何数据结构,在我再次尝试变得聪明之后:@MwamiTovi我不会说这是事先建议的,只有在不可能使用简单的联合类型的情况下,并且您不是一个库作者,您应该尽最大努力找到一个与泛型有关的聪明技巧,以利于它们的使用users@Aprillion我只是这样说,因为我们的同事事先知道变量键会在整个过程中发生变异。事实上,你也是对的,我不是图书馆的作者之一。