I have a hook that returns data. Its type is depending on the props passed.
interface MyHookProps<T, TF> {
transform?: (data: T) => TF
}
const myHook = <T extends any = any, TF = any>(props?: MyHookProps<T, TF>) => {
const [items, setItems] = useState([])
return { data: items }
}
I want my data to be the return type of transform when it is passed as prop and T when its not
example:
interface User {
name: string;
age: number;
}
const { data } = myHook<User[]>();
Its type should be User[], but when you do it like this:
const { data } = myHook<User[]>({
transform: (data) => data.map(d => ({ ...d, another: 1 }))
})
Its type should be
{
name: string;
age: number;
another: string;
}[]