我很难理解为什么打字稿编译器对我在组件中使用的 forwardRef 不满意。
对于下面的示例,我已将我的代码缩减为基本要素,确保此打字稿错误是代码中唯一出现的错误,根据我的实际代码中的问题:
import { createRef, forwardRef, RefObject } from 'react';
const MyComponent = () => {
const selectCountryRef = createRef<HTMLSelectElement>();
return (
<div>
<SelectCountry ref={selectCountryRef} />
</div>
);
};
const SelectCountry = forwardRef((ref?: RefObject<HTMLSelectElement>) => {
return (
<FormFieldSelect ref={ref} />
);
});
const FormFieldSelect = ({ ref }) => {
return (
<div>
<select ref={ref}>
</select>
</div>
);
};
当试图编译这个时,我得到了错误:
Property 'current' is missing in type '{ ref: RefObject<HTMLSelectElement>; }' but required in type 'RefObject<HTMLSelectElement>'.
在 VSCode 中,<SelectCountry ...
是 IDE 发牢骚的地方,确切的消息是:
const SelectCountry: ForwardRefExoticComponent<RefObject<HTMLSelectElement> & RefAttributes<unknown>> Property 'current' is missing in type '{ ref: RefObject<HTMLSelectElement>; }' but required in type 'RefObject<HTMLSelectElement>'.ts(2741) index.d.ts(85, 18): 'current' is declared here.
我只是不明白为什么我会收到这个错误。
目前使用 React 17.0.2