くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

HygenのPrompterとQuestionsに型を付ける(Enquirer)

Hygen便利だけど、型がわからないな。。と思ったので、
いろいろ調べてみたときの備忘録(*´ω`*)

サンプルはこんな感じ(*´ω`*)

// prompt.ts
import type Enquirer from "enquirer";

// 質問リストの型
type PromptOptions = Exclude<
  Parameters<typeof Enquirer.prompt>[0],
  Function | any[]
>;

// 回答の型
type Answer = {
  name: string;
};

// 質問のリスト
const questions: PromptOptions[] = [
  {
    type: "input",
    name: "name",
    message: "What is the name of page? ex. Users or UserDetails",
  },
];

// hygenが実行するprompt
const propmter = {
  // 引数のprompterの実態は、Enquirer
  prompt: async ({ prompter }:{ prompter: typeof Enquirer }) => {
    const answers = await prompter.prompt<Answer>(questions);
    return { ...answer, addParam: "ex-param" };
  },
};
export default prompter;

プロンプトの実体は、Enquirer。
質問リストのPromptOptionsもEnquirerだけど、型が提供されてない。

なので、Excludeを使って型を取ってきている感じ。


以上!! ドキュメントも少ないので、細かい指定が分かりづらいなと思ってたけど、
補完が効くようになったので、だいぶ楽になった。。(*´ω`*)

参考にしたサイト様