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

如何让VS Code跳转至柯里化函数定义而非柯里化工具函数?

解决VS Code跳转定义到包装函数而非原业务函数的问题

有几种可行的方式可以解决这个问题,从代码层面配置到编辑器设置都有对应的方案:

方案一:拆分原函数与包装函数,配合TSDoc注解

把业务逻辑单独写成命名函数,再用工具函数包装导出,同时在包装后的变量上添加@see注解指向原业务函数:

/**
 * 获取用户活动列表
 * @see getActivitiesImpl
 */
export const getActivities = refreshTokenAsNeeded(getActivitiesImpl);

/**
 * 实际处理活动列表获取的业务逻辑
 */
async function getActivitiesImpl() {
  const response = await fetch('/api/activities');
  return response.json();
}

这样Cmd+Click调用getActivities时,虽然默认会跳转到包装后的变量定义,但可以通过TSDoc里的@see链接直接跳转到原业务函数。如果开启VS Code的相关设置,还能直接优先跳转原函数。

方案二:让工具函数严格保留原函数类型

通过泛型精确捕获原函数的参数和返回值类型,让工具函数返回与原函数完全一致的类型,帮助TypeScript和VS Code识别原函数的定义:

// 柯里化工具函数的类型定义
function refreshTokenAsNeeded<T extends (...args: any[]) => Promise<any>>(
  fn: T
): T {
  return async (...args: Parameters<T>): Promise<ReturnType<T>> => {
    // 令牌过期检查与刷新逻辑
    if (isTokenExpired()) {
      await refreshAccessToken();
    }
    return fn(...args);
  } as T;
}

// 原业务函数
async function getActivitiesImpl() {
  // 业务逻辑实现
}

// 包装后导出
export const getActivities = refreshTokenAsNeeded(getActivitiesImpl);

这种写法下,TypeScript会将getActivities的类型与getActivitiesImpl完全对齐,VS Code的定义跳转逻辑会更倾向于关联到原业务函数。

方案三:调整VS Code编辑器设置

打开VS Code设置,搜索typescript.preferences.preferGoToSourceDefinition并设置为true。这个选项会让编辑器在遇到类型匹配的多个定义时,优先跳转到原始的源函数实现,而非包装后的函数引用。

内容的提问来源于stack exchange,提问作者Eats Indigo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:45:30