Reactjs 类型为'的参数;字符串';不可分配给类型为'`${string}``{string}.${string}`{string}.${number}`';
我已将Reactjs 类型为'的参数;字符串';不可分配给类型为'`${string}``{string}.${string}`{string}.${number}`';,reactjs,typescript,react-hook-form,Reactjs,Typescript,React Hook Form,我已将react hook表单从第6版迁移到第7版 更改寄存器方法后,如中所述,出现以下错误: “string”类型的参数不能分配给“${string}{code>${string}.${string}{code>${string}.${number}”类型的参数。TS2345 Register需要一个字符串名,我正确地提供了一个param,这个param肯定是一个字符串,但无论如何,如果我没有准确地传递string,它不会接受我的参数 任何有类似问题或想法的人都将受到高度赞赏。提前谢谢 在re
react hook表单
从第6版迁移到第7版
更改寄存器
方法后,如中所述,出现以下错误:
“string”类型的参数不能分配给“${string}
{code>${string}.${string}{code>${string}.${number}”类型的参数。TS2345
Register需要一个字符串名,我正确地提供了一个param,这个param肯定是一个字符串,但无论如何,如果我没有准确地传递string,它不会接受我的参数
任何有类似问题或想法的人都将受到高度赞赏。提前谢谢 在react hook表单中
v7不接受字符串,但接受字符串。这是寄存器的定义:
导出声明类型UseFormRegister=<
TFieldName扩展字段路径=字段路径
>(
姓名:TFieldName,
选项?:注册表选项
)=>RefCallbackHandler;
TFieldName
是文本的并集。文本是特定的字段名值。请参见下面的示例:
接口值{
名字:字符串;
lastName:string;
}
const{register,handleSubmit}=useForm();
常量firstNameId='firstName';//字符串文字
常量lastNameId:string='lastName';//一串
返回(
//这是因为第一个参数是“firstName”|“lastName”
//这不起作用,因为它只是一个字符串,而不是
//两个文字值
);
解决方案
从中提出的解决方案对我来说有点冗长,但它现在起作用
您需要将寄存器名称强制转换为文字:
但是,如果索引
是一个数字,则上述解决方案不起作用。当您将文字与数字混合时,如下所示:
`test.${index}.test`
因为索引
可以是任何数字,typescript无法将其转换为精确值。文档中建议的解决方法是手动转换为文字:
{…寄存器(`test.${index}.test`as`test.0.test`)}
尝试在控制器上设置动态名称时遇到此错误。您可以添加您在register
方法中使用的参数的代码段吗?那么,如何将类似这样的内容转换成字符串文字,它适用于v6:${arrayName}[${index}]。fieldName
?我尝试了基于迁移文档的${arrayName}.${index}.fieldName
,但得到了相同的错误。请参见此@KizTarget在使用“as const”时出现相同的错误。我不确定我在这里遗漏了什么。又快又脏,但是你会注意到,当使用“testIndex”时,它抛出了TS错误,而“otherIndex”则没有。我的组件上的传入属性类型为“number”@我知道原因testIndex
是一个数字,otherValue
是一个文字,您可以通过组合其他文字来创建文字,但不能将文字与“泛型”数字类型混合,因为它不是一个精确的值。