[英]Typescript An index signature parameter type must be either 'string' or 'number' when using keyof
Using Typescript, I am trying to write a function that takes in a generic object and a key value mapping of validation rules to apply on each property.使用 Typescript,我正在尝试编写一个 function,它采用通用 object 和验证规则的键值映射以应用于每个属性。 When using the keyof property to verify that keys passed in the "validators" object are in the
TObject
generic, I get An index signature parameter type must be either 'string' or 'number'
.当使用 keyof 属性验证“验证器”object 中传递的密钥是否在
TObject
泛型中时,我得到An index signature parameter type must be either 'string' or 'number'
。 Later, when attempting to access a value in validators
, I get No index signature with a parameter of type 'string' was found on type '{}'
.后来,当尝试访问
validators
中的值时,我得到No index signature with a parameter of type 'string' was found on type '{}'
。
function isValid<TObject>(
o: TObject,
validators: {
[key: keyof TObject]: (o: TObject) => boolean;
}
) {
for (const validator in validators) {
if (!validators[validator](o)) {
return false;
}
}
return true;
}
type Todo = {
text: string;
details: string;
completed: boolean;
};
console.log(
isValid<Todo>(
{
text: "mow yard",
details: "needs to be completed asap",
completed: false
},
{
text: (o: Todo) => o.text.length > 0,
completed: (o: Todo) => !!o.completed
}
)
);
You should use the keyword in
instead of :
, as :
is for index type (string, number, symbol)您应该使用关键字
in
而不是:
,因为:
用于索引类型(字符串、数字、符号)
function isValid<TObject>(
o: TObject,
validators: {
[key in keyof TObject]: (o: TObject) => boolean;
}
) {
for (const validator in validators) {
if (!validators[validator](o)) {
return false;
}
}
return true;
}
if a key is optional, use ?
如果键是可选的,请使用
?
: :
validators: {
[key in keyof TObject]?: (o: TObject) => boolean;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.