简体   繁体   English

为什么 typescript 将泛型类型推断为类型“”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM