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
Typescript 类型脚本索引签名参数类型必须为';字符串';或';编号';使用keyof时_Typescript - Fatal编程技术网

Typescript 类型脚本索引签名参数类型必须为';字符串';或';编号';使用keyof时

Typescript 类型脚本索引签名参数类型必须为';字符串';或';编号';使用keyof时,typescript,Typescript,使用Typescript,我试图编写一个函数,该函数接受一个泛型对象和一个要应用于每个属性的验证规则的键值映射。当使用keyof属性验证在“validators”对象中传递的键是否在TObjectgeneric中时,我得到索引签名参数类型必须是“string”或“number”。后来,当尝试访问验证器中的值时,在类型{}上找不到带有“string”类型参数的索引签名 函数无效( o:托宾, 验证器:{ [key:keyof TObject]:(o:TObject)=>布尔值; } ) { for

使用Typescript,我试图编写一个函数,该函数接受一个泛型对象和一个要应用于每个属性的验证规则的键值映射。当使用keyof属性验证在“validators”对象中传递的键是否在
TObject
generic中时,我得到
索引签名参数类型必须是“string”或“number”
。后来,当尝试访问
验证器中的值时,
在类型{}
上找不到带有“string”类型参数的索引签名

函数无效(
o:托宾,
验证器:{
[key:keyof TObject]:(o:TObject)=>布尔值;
}
) {
for(验证器中的常量验证器){
如果(!验证器[验证器](o)){
返回false;
}
}
返回true;
}
类型Todo={
文本:字符串;
详细信息:字符串;
完成:布尔;
};
console.log(
有效(
{
文字:“割草场”,
详细信息:“需要尽快完成”,
已完成:false
},
{
text:(o:Todo)=>o.text.length>0,
已完成:(o:Todo)=>!!o.已完成
}
)
);

您应该在
中使用关键字
,而不是
,因为
用于索引类型(字符串、数字、符号)

函数无效(
o:托宾,
验证器:{
[key-in-keyof-TObject]:(o:TObject)=>布尔值;
}
) {
for(验证器中的常量验证器){
如果(!验证器[验证器](o)){
返回false;
}
}
返回true;
}
如果钥匙是可选的,请使用

验证程序:{
[key-in-keyof-TObject]?:(o:TObject)=>布尔值;
}