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

TypeScript中能否部分指定函数类型,让其余类型自动推断?

在TypeScript中部分指定函数输入类型并自动推断剩余类型

你的核心需求是仅指定函数的输入类型,让TypeScript自动推断返回类型及关联泛型参数,这在TypeScript中可以通过两种简洁的方式实现:

方法一:直接给泛型工具函数指定输入类型

当前代码中property("id")的泛型参数T因缺乏上下文会被推断为unknown,导致后续类型不匹配。你可以仅给property显式指定输入类型DomainObject,泛型K让TypeScript自动推断:

const idTwice = pipe(
  property<DomainObject>("id"), // 仅指定T为DomainObject,K自动推断为"id"
  (s) => s + s // s自动推断为string
);
// idTwice的类型自动推断为:(d: DomainObject) => string

这种方式无需额外定义工具函数,直接通过部分指定泛型参数实现需求,完全符合你“仅指定输入类型”的要求。

方法二:封装辅助函数统一约束输入类型

如果需要多次基于同一输入类型构建管道,可以封装一个高阶辅助函数,提前指定输入类型后再传入具体的转换函数:

// 封装一个高阶pipe,先指定输入类型A,再推断B和C
const pipeForInput = <A>() => 
  <B, C>(f: (a: A) => B, g: (b: B) => C) => 
    (a: A) => g(f(a));

// 使用时仅指定输入类型DomainObject,其余自动推断
const idTwice = pipeForInput<DomainObject>()(
  property("id"),
  (s) => s + s // s自动推断为string
);

这种方式适合批量处理同一输入类型的场景,避免重复指定DomainObject。

为什么你之前的尝试未生效

你定义的Map1<A> = <B>(a: A) => B属于高阶类型构造器,但TypeScript不支持在变量类型标注中直接使用这种构造器来实现部分推断——变量的类型标注必须是具体的类型(而非泛型类型的生成器),因此无法通过这种方式达成需求。

内容的提问来源于stack exchange,提问作者David P. Caldwell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:53:13