首页 > 解决方案 > TypeScript中错误继承的函数返回类型?

问题描述

我正在研究一个函数,它返回包含 2 个条目、一些值和一个函数的数组。简化版如下所示:

export default function useAnimatedTiming(value: number) {
  return [value, () => null];
}

Typescript 继承此函数的返回值:

函数 useAnimatedTiming(value: number): (number | (() => null))[]

正如我所期望的那样

函数 useAnimatedTiming(value: number): [number, () => null]

即返回具有有序类型的数组。我可能在这里做错了什么,但我怎么能得到这种类型的返回,因为在进行数组解构以获取这些值时它会非常方便,即

const [myValue, myAction] = useAnimatedTiming(1);

myAction()目前返回以下错误,因为打字稿将其视为数字或函数,而不仅仅是函数

标签: javascripttypescript

解决方案


除非必须,否则 Typescript 不会从数组文字中推断出元组类型(这是您所期望的)。

你有两个选择,要么拼出返回类型:

export default function useAnimatedTiming(value: number): [number, () => null] {
  return [value, () => null];
}

或者您可以创建一个函数,强制编译器将数组文字的类型推断为元组而不是数组:

export function tuple<T extends unknown[]>(...a: T) { 
  return a;
}
export default function useAnimatedTiming(value: number) { // return type inferred as  [number, () => null] 
  return tuple(value, () => null)
}

推荐阅读