我很难理解为什么打字稿编译器对我在组件中使用的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>
);
};
Run Code Online (Sandbox Code Playgroud)
当尝试编译这个时,我收到错误:
Property 'current' is missing in type '{ ref: RefObject<HTMLSelectElement>; }' but required in type 'RefObject<HTMLSelectElement>'.
在 VSCode 中,<SelectCountry …
我找到了将 ENUM 转换为驼峰大小写的解决方案,但它并不优雅。
var underscoreToCamelCase = function(str) {
str = (str === undefined || str === null) ? '' : str;
str = str.replace(/_/g, " ").toLowerCase();
return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function(match, index) {
if (+match === 0) return "";
return index == 0 ? match.toLowerCase() : match.toUpperCase();
});
}
Run Code Online (Sandbox Code Playgroud)
因此,如果 str 是 MY_ENUM_STRING,它将返回 myEnumString。
必须有一种方法可以通过单个正则表达式匹配来实现这一目标吗?