[英]Why is typescript inferring the generic type to be type ""
I have created this React component called StateWithValidation.我创建了这个名为 StateWithValidation 的 React 组件。
import { useStateWithValidation } from "./useStateWithValidation"; export const StateWithValidation = () => { const [username, setUserName, isValid] = useStateWithValidation( (value: string) => value.length > 5, "" ); return ( <div> <div>Valid: {isValid.toString()}</div> <input type="text" value={username} onChange={(e) => setUserName(e.target.value)} /> </div> ); };
I have a custom hook which is generic, it validates and handles user input changes.我有一个通用的自定义钩子,它验证并处理用户输入更改。
import { useCallback, useState } from "react"; type useStateValidationFn = <U>( validationFunc: (value: U) => boolean, initialState: U ) => [U, (nextState: U) => void, boolean]; export const useStateWithValidation: useStateValidationFn = ( validationFunc, initialValue ) => { const [state, setState] = useState(initialValue); const [isValid, setIsValid] = useState(() => validationFunc(state)); const onChange = useCallback( (nextState) => { setState(nextState); setIsValid(validationFunc(nextState)); }, [validationFunc] ); return [state, onChange, isValid]; };
Why is it when I type in the React component, the value of the generic type is "" instead of string.为什么我在 React 组件中输入的时候,泛型类型的值是 "" 而不是字符串。
Try changing as below尝试如下更改
const [username, setUserName, isValid] = useStateWithValidation(
(value: string) => value.length > 5,
new String()
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.