惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
雷峰网
雷峰网
GbyAI
GbyAI
Hugging Face - Blog
Hugging Face - Blog
N
Netflix TechBlog - Medium
博客园 - 聂微东
Y
Y Combinator Blog
罗磊的独立博客
博客园_首页
小众软件
小众软件
有赞技术团队
有赞技术团队
爱范儿
爱范儿
F
Fortinet All Blogs
C
Check Point Blog
Google DeepMind News
Google DeepMind News
云风的 BLOG
云风的 BLOG
Apple Machine Learning Research
Apple Machine Learning Research
M
MIT News - Artificial intelligence
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
aimingoo的专栏
aimingoo的专栏

TypeScript

Bun 1.4,安卓平板可玩性大提升? - V2EX ts 生态有没有开源的简单的 kv 配置管理项目 你们是怎么学习 typescript 的? 用 Go 移植的 TypeScript 7 要来了 TypeScript5.9,仿佛走出草原来到了现代社会 Typescript 有没有能对接 AI 的知识库或者文档?能处理稍微复杂点的类型 typescript 如何返回一个动态对象类型 ts 有没有直接能查看最终类型的方法 TypeScript Native 预览版发布了 关于 TypeScript 装饰器和接口的问题,请教一下各位 你们 typescript 用自带枚举还是字符串枚举,感觉字符串枚举类型用起来有点不可靠啊 effect-ts typescript 达人乱入 TypeScript 宣布原生移植计划,性能将提升 10 倍? #笔记#更好的 ts 重载声明方法 使用 satisfies 实现穷举类型保护 请教一个 TS 问题,不知能否实现 装饰器能不能装饰类的所有方法 TypeSciprt 类型推断,如何进一步收窄类型? TypeScript 项目打包发布到 npm,如何给方法和接口添加 dts 为啥下面这段代码 TS 不报错 ts 类型约束+请求参数校验+自动生成 openapi/swagger 文档,这三者目前有整合为一体的最佳实践吗 TypeScript 能不能别这么古怪,这行为什么会报错呢? 怎么每次碰到想不通的代码行都出在 TypeScript😢 这行到底哪里有问题? 低估了 typescript 的难度 前端写 nestjs 后端,用 TypeORM 时感到非常困惑,不知道是不是我的理解有问题 我列举了市面上最好的几个 TypeScript 教程, 想深入学习 TypeScript 的同学以后不用走弯路了 这样的函数类型定义在 ts 里面叫什么? typescript 如何忽略泛型参数啊? TypeScript 现在的应用场景
TypeScript 类型推导真强大。
zhbhun · 2024-10-18 · via TypeScript

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

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

async function plus(a: number, b: number): Promise<number> {
  await new Promise<void>((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 无法做到?