javascript - 打字稿:使用函数数组键入函数,该函数返回每个函数返回类型的数组
问题描述
下面的代码是否可以正确输入?
function arrayElementTypes(...array: Array<(() => string) | (() => number) | (() => {prop: string}) | (() => number[])>) {
/// .. do something
/// .. and then return an array with each functions result
return array.map(arg => arg())
}
const [varA, varB, varC] = arrayElementTypes( () => "", () => ({prop: "prop"}), () => [1,2,3] )
// how can this be typed appropriately so that the :
// varA: string
// varB: {prop: string}
// varC: number[]
解决方案
设法做到了
type ReturnTypes<T extends Array<(...a: any[]) => any>> = {
[P in keyof T]: T[P] extends (...a: any[]) => infer R ? R : never
}
type CustomArrayElement = (() => string) | (() => number) | (() => {prop: string}) | (() => number[])
function arrayElementTypes<T extends CustomArrayElement[]>(...array: T): ReturnTypes<typeof array> {
return array.map(arg => arg())
}
const [varA, varB, varC] = arrayElementTypes( () => "", () => ({prop: "prop"}), () => [1,2,3] )
谢谢大家的帮助!!
推荐阅读
- qt - 孙子打破中继器
- javascript - 如何在方法中获取更新状态?(反应和还原)
- python - Python Pandas:寻找一种有效的方法来重构这个 Dataframe
- web-services - 将 Serilog 日志发布到 Rest api
- square-connect - 如果我在网站上添加订单,最新的 API 是否会将订单推送到我的商店的 POS 终端?
- python - 如何在 Qtablewidget Python 中设置自定义键盘按键事件?
- javascript - 通过变量获取对象的多维值
- javascript - 反应:为什么任务没有出现?
- c# - 正则表达式匹配字符串中间的子字符串
- python - 使用 python 格式化 UNIX 命令输出