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
Javascript Typescript抱怨显式类型没有索引签名_Javascript_Typescript_Types_Typescript Typings - Fatal编程技术网

Javascript Typescript抱怨显式类型没有索引签名

Javascript Typescript抱怨显式类型没有索引签名,javascript,typescript,types,typescript-typings,Javascript,Typescript,Types,Typescript Typings,Typescript正在引发错误“元素隐式地具有'any'类型,因为类型'HumansToDogs'没有索引签名。”关于以下代码 对我来说,每件事似乎都是直截了当的,有人能帮我吗 type HumanName='Jessie'|'Mark'; 键入DogName='Spot'|'Buddy'; 类型:人狗={ [输入人名]:DogName;//这不是索引签名吗? } const humansToDogs:humansToDogs={ “杰西”:“伙计”, '标记':'点', }; for(人形狗

Typescript正在引发错误
“元素隐式地具有'any'类型,因为类型'HumansToDogs'没有索引签名。”
关于以下代码

对我来说,每件事似乎都是直截了当的,有人能帮我吗

type HumanName='Jessie'|'Mark';
键入DogName='Spot'|'Buddy';
类型:人狗={
[输入人名]:DogName;//这不是索引签名吗?
}
const humansToDogs:humansToDogs={
“杰西”:“伙计”,
'标记':'点',
};
for(人形狗中的const human){
const dog=humansToDogs[human];//此处的索引签名错误
}

的..of的
将循环变量键入
字符串。使用
noImplicitAny
时,您无法索引到具有任意
字符串的类型。最简单的解决方案是使用类型断言:

for (const human  in humansToDogs) {
    const dog = humansToDogs[human as HumanName];  // Index signature error here
}

您可以显式地让Typescript编译器知道
human
引用了
HumanName
的键,如下所示:

humansToDogs[human as keyof HumanName]
但更好的方法是定义数据的形状,您可以显式定义一个将索引声明为字符串的新类型:

type HumanNames = {[k: string] HumanName};