javascript - 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()
目前返回以下错误,因为打字稿将其视为数字或函数,而不仅仅是函数
解决方案
除非必须,否则 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)
}
推荐阅读
- java - Java代码问题
- javascript - How to check whether a javascript object contains any values while having keys
- mysql - 在 Django 中获取对象的后代
- python - Flask Form Submit 什么都不做
- json - 如何在声明中为单个规则指定消息
- python - Odoo 11 如何覆盖 compute_all() 方法?
- python - Print list in specified range Python
- php - PHP注册表单发布方法不起作用
- pattern-matching - Elixir:如果地图包含至少一个整数键,则模式匹配函数
- rest - 如何清除 ALM 12.5x REST API 在 HPQC 中打开的连接?