TypeScript 类型推导真强大。

1次阅读

共计 764 个字符,预计需要花费 2 分钟才能阅读完成。

最近在学习开发客户端相关的功能,发现 Kotlin 和 Swift 要实现泛化的高阶函数不太容易。比如我要实现一个高阶函数,需要将传入的一个 async 函数转为串行执行的函数,必须等待前一个任务完成后才能开始下一个。使用 TS 可以这么做:

function sequentialize Promise>(asyncFn: T): (...args: Parameters) => ReturnType {let queue: Promise = Promise.resolve(); // 初始化队列
  return function (...args: Parameters): ReturnType {const result = queue.then(() => asyncFn(...args)); // 将异步任务添加到队列中
    queue = result.catch(() => {}); // 捕获错误, 防止队列中
    return result as ReturnType; // 确保返回类型与原始函数一致
  };
}

async function plus(a: number, b: number): Promise {await new Promise((resolve) => {setTimeout(() => {resolve();
      console.log(performance.now(), a, b);
    }, 1000);
  });
  return a + b;
}

const sequentializePlus = sequentialize(plus);

但这在 Swift 和 Kotlin 里不太好处理,它们没法传入动态的函数,并包装后返回同类型的函数。想问下,如果像 Swift 和 Kotlin 这样的强类型语言要实现这样的语法,是否会存在什么限制?是否是因为 TS 编译后的 JS 是动态类型的,才支持这种类型推导(运行不会出问题),而 Swift 和 Kotlin 无法做到?

正文完
 0