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

能否从TypeScript函数体推断函数参数的键集合类型?

能否基于函数体推断TypeScript函数的参数类型?

结论:不行

原因如下:

  1. TypeScript的类型推断是正向静态推导,仅基于代码的静态声明结构(比如参数注解、显式类型、调用传入的参数),不会逆向扫描函数体代码来反推参数的类型约束。对于未标注类型的参数bar,TypeScript只会默认推断为any,不会识别函数体里用到的bar.baz和bar.quux,进而给bar加上包含对应键的类型。
  2. TypeScript的核心设计目标是可靠的静态类型检查,逆向从函数体推导参数类型会引入大量不确定性:比如函数体存在条件分支时,不同分支可能用到不同属性;如果有动态属性访问(如bar[动态变量]),根本无法确定具体键名。这种推导会让类型系统复杂度飙升,结果不可预测,违背静态类型的设计初衷。
  3. 你定义的MyFn<Keys>泛型类型,其泛型参数只能通过显式注解或调用时的参数传入来确定,无法从函数体内部的属性使用情况自动推断出Keys的具体值。比如你必须显式写const foo: MyFn<"baz" | "quux"> = (bar) => bar.baz + bar.quux,才能让bar获得对应的类型约束。

内容的提问来源于stack exchange,提问作者Steven Kalt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:42:11