Javascript Typescript未读取正确的类型

Javascript Typescript未读取正确的类型,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我有这个钩子: 从“react”导入{ChangeEvent,reobject,useffect,useState}; 类型OriginalOnchange=(e:ChangeEvent)=>void; 类型OnchangeEvent=ChangeEvent; 导出类型OnChangeWrapper=(originalOnchange?:originalOnchange)=>(onchangeEvent:onchangeEvent)=>void; 导出常量useTrackValidity=( i

我有这个钩子:

从“react”导入{ChangeEvent,reobject,useffect,useState};
类型OriginalOnchange=(e:ChangeEvent)=>void;
类型OnchangeEvent=ChangeEvent;
导出类型OnChangeWrapper=(originalOnchange?:originalOnchange)=>(onchangeEvent:onchangeEvent)=>void;
导出常量useTrackValidity=(
inputRef:重新对象,
值:字符串,
invalidInputMessage?:字符串
) => {
const[isValid,setIsValid]=useState();
const onChangeWrapper:onChangeWrapper=(originalOnchange?:originalOnchange)=>(onChangeEvent:onChangeEvent)=>{
setIsValid(!(!!invalidInputMessage | |!onChangeEvent.currentTarget.validity.valid));
如果(!!原始更改){
原始更改(onChangeEvent);
}
};
useffect(()=>{
if(输入参考电流){
inputRef.current.setCustomValidity(invalidInputMessage | |“”);
setIsValid(!(!!invalidInputMessage | |!inputRef.current.validity.valid));
}
},[inputRef,invalidInputMessage,value]);
返回[isValid,onChangeWrapper];
};
当我这样称呼它时:

const[isValid,onChangeWrapper]=useTrackValidity(inputRef,value?.toString()??“”,invalidInputMessage);
返回(
);
我得到这个错误:

TS2349: This expression is not callable.
  Not all constituents of type 'boolean | OnChangeWrapper' are callable.
    Type 'false' has no call signatures. TS2722: Cannot invoke an object which is possibly 'undefined'. 
每当我调用
onChangeWrapper

当我将上述内容更改为:

const[isValid,onChangeWrapper]=useTrackValidity(inputRef,value?.toString()??“”,invalidInputMessage)作为[
布尔值|未定义,
一次性包装
];

它确实有效,这让我感到奇怪,因为我基本上重复了返回类型。

TypeScript推断返回的数组将是
array
——也就是说,所有元素都将是这些类型的交集
boolean
是不可调用的,因此如果没有某种保护,就不能调用任何元素

要解决此问题,请告诉TypeScript您的钩子函数返回
[布尔,yourFunctionType]
,具体如下:

type onChangeWrapperType = /*...the function type here...*/;

// ...

export const useTrackValidity = (
  // ...
): [boolean, onChangeWrapperType] => {
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^−−−−−−−−−−−−−−−−−−−−−−−−−− here
    // ...
    const onChangeWrapper: onChangeWrapperType = /*...*/;
    // ...
    return [isVaild, onChangeWrapper];
};