You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中如何判断函数参数类型?有无更优实现方式?

问题解答
  1. 你的判断完全正确
    TypeScript的类型信息仅存在于编译阶段,编译生成的JavaScript代码会彻底移除所有类型相关的语法。你示例里的typeof func == typeof VoidToVoidFunc写法本身就不合法——VoidToVoidFunc是TypeScript的类型别名,不是运行时存在的变量/值,编译时就会报错,更别说运行时判断了。

  2. 更优实现方式
    不需要区分同步和异步函数,直接用await统一处理即可:因为await可以接收非Promise值,此时会直接返回该值,不会产生额外等待。改写后的代码如下:

type VoidToVoidFunc = () => void;
type VoidToPromiseVoidFunc = () => Promise<void>;

async function add(func: VoidToVoidFunc | VoidToPromiseVoidFunc) {
  await func();
}

add(() => console.log(1)); // 同步函数,正常执行
add(async () => {
  await new Promise(resolve => setTimeout(resolve, 1000));
  console.log(2);
}); // 异步函数,等待完成后执行

这种写法既简洁又能覆盖两种函数场景,不需要额外的分支判断。

内容的提问来源于stack exchange,提问作者Brian Hong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:42:34