网站搜索

typescript - 我如何指示 VS Code 跳转到柯里化函数的定义,而不是柯里化函数的实现


我有一个 API 客户端,它声明了多个用于获取数据的方法。

在这些函数中,我需要在访问令牌过期时处理刷新操作。

为此,我创建了一个柯里化函数来处理令牌刷新,它看起来是这样的:

const refreshTokenAsNeeded = <Data extends StravaTokenData, Result>(
  fn: (data: Data) => Promise<Result>
) => {
  return async (data: Data): Promise<Result> => {
    const { refreshToken, accessToken, expiresAt } = data;

    if (data.expiresAt < unixTime()) {
      logger.info("Token expired, fetching new one");
      const {
        refresh_token: refreshToken,
        access_token: accessToken,
        expires_at: expiresAt,
      } = await getNewRefreshToken(data.refreshToken);

      await updateRefreshToken(data.refreshToken, {
        refreshToken,
        accessToken,
        expiresAt,
      });
      logger.info("Token saved");
    }
    return fn({
      ...data,
      refreshToken,
      accessToken,
      expiresAt,
    });
  };
};


export const getActivities = refreshTokenAsNeeded<
  StravaTokenData,
  StravaActivity[]
>(async ({ expiresAt, refreshToken, accessToken }) => {
  const { data } = await axios.get<StravaActivity[]>(
    `${stravaApiBaseUrl}/athlete/activities`,
    {
      headers: {
        authorization: `Bearer ${accessToken}`,
      },
    }
  );
  return data;
});

这的一个不幸副作用是,当我按住 Cmd 并点击 getActivities 时,VSCode 会跳转到 refreshTokenAsNeeded 的定义,

const activities = await getActivities(user);

有没有办法指示 VS Code 不这样做,也许使用不同的类型注解?