Typescript:试图用函数实现代替三元操作符



我试图用功能实现取代三元操作符。发现很难为下面写any的代码编写typescript类型。

  1. 如何将泛型类型传递给thnels函数参数,该参数可以接受functionany other type,从而使类型检查严格并且returns是正确的类型?
  2. 我如何删除any类型在下面的代码与正确的类型?
interface Predicate {
(...args: any): boolean;
}
const ifThenElse = (bool: boolean | Predicate) => (thn: any) => (els: any) : any => {
if(bool) {
if(typeof thn === 'function') {
return thn()
}
return thn
}
if(typeof els === 'function') {
return els()
}
return thn
}
var coffeesToday = ifThenElse(true)(3)(1);
var coffeesTomorrow = ifThenElse(false)(() => 3)( () => 4);
console.log('coffeesToday', coffeesToday)
console.log('coffeesTomorrow', coffeesTomorrow)

游乐场

你可以这样做:

type Result<T> = T extends (...args: any[]) => infer R ? R : T
const ifThenElse = (bool: boolean | Predicate) => <T>(thn: T) => <E>(els: E): Result<T> | Result<E> => {
if (bool) {
if (typeof thn === 'function') {
return thn()
}
return thn as Result<T> | Result<E>
}
if (typeof els === 'function') {
return els()
}
return els as Result<T> | Result<E>
}

游乐场

因此结果返回类型是两个可能分支的并集。

相关内容

  • 没有找到相关文章

最新更新