Octokitを使ってGitHubのAPIを叩いてデータを取得する
TypeScriptで開発してたのでしっかり型付けを行いたい
octokit/types.ts: Shared TypeScript definitions for Octokit projects
これ参照するのがよい?
npm i -D @octokit/typesREADME読んだがoctokitを変数化してoctokitに生えているメソッドから返ってくる型を特定する方法だった
できれば変数から型情報を抜き出すのはやりたくないので少し調べた
使い方のバリエーションとしてほかにもありそうかなということで、GitHub検索で探したら参考になりそうなコードが出てきた
import type { Octokit } from "@octokit/rest";とあるようにOctokitの型情報が存在するようなのでそこからたどって行けそう
結局下記のような感じでデータの取得方法と対応した型定義の呼び出し方で定義できた
- 一部抜粋
export type Octokit = ReturnType<typeof getOctokit>
export type Jobs = GetResponseDataTypeFromEndpointMethod<
  Octokit['rest']['actions']['listJobsForWorkflowRun']
>['jobs']
export type Annotations = GetResponseDataTypeFromEndpointMethod<
  Octokit['rest']['checks']['listAnnotations']
>
export async function getFailedJobs(
  octokit: Octokit,
  runId: number
): Promise<Jobs> {
  const { data } = await octokit.rest.actions.listJobsForWorkflowRun({
    owner: context.repo.owner,
    repo: context.repo.repo,
    run_id: runId
  })
  const completedJobs = data.jobs.filter(j => j.status === 'completed')
  const failedJobs = completedJobs.filter(j => j.conclusion === 'failure')
  return failedJobs || []
}
export async function getJobAnnotations(
  octokit: Octokit,
  jobId: number
): Promise<Annotations> {
  const { data } = await octokit.rest.checks.listAnnotations({
    owner: context.repo.owner,
    repo: context.repo.repo,
    check_run_id: jobId
  })
  return data
}GetResponseDataTypeFromEndpointMethodが便利


