typescript - TypeScript 通用剩余参数到联合返回类型
问题描述
目前,TypeScript 允许声明动态泛型参数。
function bind<U extends any[]>(...args: U);
但是如果我想让我的函数返回一个参数类型的联合呢?就像是:
function bind<U extends any[]>(...args: U): U1 | U2 | U3...;
有没有办法做到这一点?
解决方案
要获得所有参数的联合,您可以使用U[number]
:
function bind<U extends any[]>(...args: U): U[number] {
return args[Math.round(Math.random()*(args.length - 1))]; // dummy implementation
}
let r = bind(1,"2", true) // number | string | boolean
console.log(r)
您也可以获取某个位置的类型,但是由于我们不知道该位置是否存在,我们需要使用条件类型;
type At<T extends any[], I extends number> = T extends Record<I, infer U> ? U : never;
function bind<U extends any[]>(...args: U): At<U, 0> {
return args[Math.round(Math.random()*(args.length - 1))]; // dummy implementation
}
let r = bind(1,"2", true) // number
推荐阅读
- compiler-errors - 在 Magento 版本中运行“composer update”时出现错误。2.3.3,PHP 7.3.15
- nlp - 对地理术语进行分类的库和方法
- ssis - dtexec 运行时出现错误:无法加载脚本以执行
- javascript - 如何设计风格
- react-native - react-native app的APK显示黑屏
- r - 使用 mlr3 调整 GLMNET
- firebase - 如何在flutter中从文档中查询特定的数据字段
- javascript - 试图破坏画布上的先前图表
- css - Bootstarp 4 - 如何更改移动设备不同行中的列顺序
- python - 如何执行算术运算和分组并创建新的数据框