Reactjs 如何在自定义挂钩中动态设置状态类型

Reactjs 如何在自定义挂钩中动态设置状态类型,reactjs,typescript,react-hooks,Reactjs,Typescript,React Hooks,我正在构建一个自定义钩子,我想将状态类型设置为与初始状态类型相同 const useCustomHook = (initialState)=>{ ... const [state,setState] = useState<someDynamicType>(initialState); ... } const useCustomHook=(initialState)=>{ ... 常量[状态,设置状态]=使用状态(初始状态); ... } 我该怎么做?

我正在构建一个自定义钩子,我想将状态类型设置为与初始状态类型相同

const useCustomHook = (initialState)=>{
     ...
  const [state,setState] = useState<someDynamicType>(initialState);
     ...
}
const useCustomHook=(initialState)=>{
...
常量[状态,设置状态]=使用状态(初始状态);
...
}
我该怎么做?
初始状态可以是任何类型,但不总是相同的类型

使用泛型将类型添加到
初始状态
,以及
使用状态
挂钩:

const useCustomHook = <T>(initialState: T)=>{
     ...
  const [state,setState] = useState<T>(initialState);
     ...
}
在这种情况下,状态类型将是
null
。在这种情况下,可以显式设置类型:

type X = { a: boolean, b: string }

useCustomHook<X | null>(x)
type X={a:boolean,b:string}
useCustomHook(x)

使用泛型向
initialState
useState
钩子添加类型:

const useCustomHook = <T>(initialState: T)=>{
     ...
  const [state,setState] = useState<T>(initialState);
     ...
}
在这种情况下,状态类型将是
null
。在这种情况下,可以显式设置类型:

type X = { a: boolean, b: string }

useCustomHook<X | null>(x)
type X={a:boolean,b:string}
useCustomHook(x)

您可以使用此处记录的通用类型:

const useCustomHook=(初始状态:T)=>{
常量[状态,设置状态]=使用状态(初始状态);
//州政府现在没有`
}

您可以使用此处记录的通用类型:

const useCustomHook=(初始状态:T)=>{
常量[状态,设置状态]=使用状态(初始状态);
//州政府现在没有`
}

您可以将
someDynamicType
作为类型参数传递给函数。如果使用匿名函数而不是lambda,则会更方便:

const useCustomHook = function<T>(initialState: T) {
     ...
  const [state,setState] = useState<T>(initialState);
     ...
}
const useCustomHook=函数(初始状态:T){
...
常量[状态,设置状态]=使用状态(初始状态);
...
}
您也可以使用lambda,但语法有点笨拙:()

const useCustomHook=(初始状态:T)=>{
...
常量[状态,设置状态]=使用状态(初始状态);
...
}

您可以将
someDynamicType
作为类型参数传递给函数。如果使用匿名函数而不是lambda,则会更方便:

const useCustomHook = function<T>(initialState: T) {
     ...
  const [state,setState] = useState<T>(initialState);
     ...
}
const useCustomHook=函数(初始状态:T){
...
常量[状态,设置状态]=使用状态(初始状态);
...
}
您也可以使用lambda,但语法有点笨拙:()

const useCustomHook=(初始状态:T)=>{
...
常量[状态,设置状态]=使用状态(初始状态);
...
}

此答案更好,因为它还解释了启用TSX支持时“”问题的解决方案。此答案更好,因为它还解释了启用TSX支持时“”问题的解决方案。