created: 2019-02-23T10:57:57.000Z

typescriptで特定ファイルのコンパイルエラーだけdisableする

typescriptのコンパイラオプションは一般的にはtsconfig.jsonでプロジェクト全体のコンパイルの設定を定義することになる。たとえば strictNullChecks とか noUnusedLocals といった項目を設定する。

    "esModuleInterop": true,
    "noUnusedLocals": true,
    "strictNullChecks": true,

フレームワークや動作環境によってこれらの制約を守れない。という場合に特定ファイルだけコンパイルチェックをskipする設定がある

たとえば

たとえばexpressのルーティングをするときに、引数に渡す関数のシグネチャは決まっている

interface RequestHandler {
    (req: Request, res: Response, next: NextFunction): any;
}

実際に使われるところはこんな感じ

app.get('/*', (req: Express.Request, res: Express.Response) => {
  return res.send("hello");
});

だが、上記のようなコードだとreq変数にアプローチしない場合はエラーになってしまう

'req' is declared but its value is never read.

しかしフレームワーク(express)を使っている以上はフレームワークに従わないといけないので困ってしまう

@ts-ignore

こういった場合は // @ts-ignore というコメントを入れると、その部分だけのコンパイルチェックを多めに見ることができる

こんな感じ

// @ts-ignore TS6133: 'req' is declared but its value is never read.
app.get('/*', (req: Express.Request, res: Express.Response) => {
  return res.send("hello");
});

参考