TypeScript中如何判断函数参数类型?有无更优实现方式?
问题解答
你的判断完全正确
TypeScript的类型信息仅存在于编译阶段,编译生成的JavaScript代码会彻底移除所有类型相关的语法。你示例里的typeof func == typeof VoidToVoidFunc写法本身就不合法——VoidToVoidFunc是TypeScript的类型别名,不是运行时存在的变量/值,编译时就会报错,更别说运行时判断了。更优实现方式
不需要区分同步和异步函数,直接用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
相关产品推荐
相关产品推荐

