React TSX出现Type 'Element' is not assignable to type 'string'.ts(2322)报错如何解决?
报错原因
你遇到的类型报错是TS自动类型推导导致的:初始化helperTextt时你赋值了空字符串,TS会自动推导该变量的类型为string,但后续你给它赋值了<Trans>组件(属于React Element类型),两种类型不匹配就触发了ts(2322)报错。
是否可以用any类型?
不推荐。给变量加any相当于直接关闭了TS对该变量的所有类型校验,后续如果该变量的使用出现逻辑错误,TS不会给出任何提示,完全丧失了TS的类型安全优势。
更合理的解决方案
最适配你场景的方案是显式指定变量类型为React.ReactNode,这个类型覆盖了所有React支持的可渲染内容类型,包括字符串、JSX元素、数字、null、undefined等,完全匹配你的使用逻辑。
修改后的代码示例:
// 显式声明类型为React.ReactNode let helperTextt: React.ReactNode = ""; let errorr = false; if (event.target.id === "hostname") { if (!HOSTNAME_REGEX.test(event.target.value)) { helperTextt = ( <Trans i18nKey="form.formData.hostNameError"> Invalid Host name </Trans> ); errorr = true; } }
如果你的项目没有全局引入React的类型,可以单独导入ReactNode:
import type { ReactNode } from 'react'; let helperTextt: ReactNode = "";
后续你把helperTextt作为props传给任意UI组件的帮助文本属性时,也不会出现类型不匹配的问题,绝大多数UI库的文本类属性默认都支持ReactNode类型。
内容的提问来源于stack exchange,提问作者user10727653
相关产品推荐
相关产品推荐

