網站搜尋

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+Click getActivities 時,VSCode 會跳到 refreshTokenAsNeeded 的定義,

const activities = await getActivities(user);

有沒有辦法指示 VS Code 不這麼做,也許使用不同的類型註解?