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

TypeScript中高阶函数使用类型谓词是否有可行解决方案?

TypeScript中是否有办法在高阶函数中使用类型谓词?

可以实现,不过需要调整高阶函数的参数接收顺序。

问题代码(存在错误)

你原本的写法会触发Cannot find parameter 'obj'.ts(1225)错误,代码如下:

type One = {
  _type: 'one';
  value: unknown;
};

type Two = {
  _type: 'two';
  value: unknown;
};

type Discriminated = One | Two;

const is =
  <O extends Discriminated>(obj: O) =>
  <K extends O['_type']>(key: K): obj is Extract<O, { _type: K }> =>
    obj._type === key;

正确实现方案

通过先传入key、再返回接收obj的函数的方式,可以正确使用类型谓词:

const isReversed =
  <O extends Discriminated, K extends O['_type']>(key: K) =>
  (obj: O): obj is Extract<O, { _type: K }> =>
    obj._type === key;

原因说明

原写法中,内层泛型函数的返回类型注解无法正确捕获外层函数的obj参数上下文,导致TypeScript无法识别obj的存在。调整参数顺序后,泛型参数的作用域和参数上下文能够被正确解析,从而实现预期的类型收窄效果。

未来若有更优方案可更新。


内容的提问来源于stack exchange,提问作者Janek Eilts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 20:20:56