Reactjs 对这一复杂问题的解释';不可分配给类型';打字错误

Reactjs 对这一复杂问题的解释';不可分配给类型';打字错误,reactjs,typescript,Reactjs,Typescript,我试图将我的React项目转移到Typescript,但没有Typescript经验。我有一个组件,其定义如下(精简): 我猜我需要通过将ref:React.mutableReObject更改为其他内容来解决这个问题,但我不知道如何解决,因为我不知道错误的具体含义 编辑:第一个答案建议使用通用参数,因此我对函数进行了如下调整: const Input = ({ handleKeyDown, placeholder, style }: InputProps, ref: any) => {

我试图将我的React项目转移到Typescript,但没有Typescript经验。我有一个组件,其定义如下(精简):

我猜我需要通过将
ref:React.mutableReObject
更改为其他内容来解决这个问题,但我不知道如何解决,因为我不知道错误的具体含义

编辑:第一个答案建议使用通用参数,因此我对函数进行了如下调整:

const Input = ({ handleKeyDown, placeholder, style }: InputProps, ref: any) => {
我必须键入props和ref来防止typescript警告(我使用
strict:“true”
),实际上这会删除上面代码示例中的警告

但是。。。使用任何方法都会导致:

ESLint: Unexpected any. Specify a different type.(@typescript-eslint/no-explicit-any)

根据
的使用,应避免使用任何
,并应使用
未知
,但尽管这删除了函数头中的警告,但它在输入组件上的
ref={ref}
中导致了一个大错误,表明与ref的不兼容性与我的第一个错误相同。TypeScript比我想象的要难。

您可以在
React.forwardRef

export const ForwardedInput=React.forwardRef(
(道具,参考)=>{
const{handleKeyDown,占位符,style}=props;
返回(
);
}
);

如果需要分离
React.forwardRef
调用及其函数,可以使用
React.forwardrefenderfunction
泛型类型

const ForwardInputReconction:React.ForwardRefRenderFunction=(
道具,
裁判
) => {
const{handleKeyDown,占位符,style}=props;
返回(
);
};
const ForwardedInput=React.forwardRef(ForwardInputReconcition);


您可以通过读取
节点\u模块中的定义文件来探索新类型。要在代码沙盒中执行此操作,请使用Cmd+左键单击热键。

谢谢。我编辑了我的问题,尽管我现在担心添加
any
类型。这会被认为是公认的做法吗?能做得更好吗?任何做法都是不好的。如果您经常在类型中使用任何类型,则不需要typescript。您是否需要编写一种可以传递到
React.forvardRef
的函数类型?您应该使用React库的类型。当您更新到React的较新版本时,在这些地方会出现错误“类型不兼容”。它将帮助您防止代码中的bug。
const Input = ({ handleKeyDown, placeholder, style }: InputProps, ref: any) => {
ESLint: Unexpected any. Specify a different type.(@typescript-eslint/no-explicit-any)