NestJSの設定で漏れるとダメなやつ

つまらないところでハマったので、未来の私のために備忘。NestJSCLIを使わずに手でプロジェクトを作ったとき、tsconfig.jsonに以下をいれないとダメ。

// tsconfig.json
{
    "compilerOptions": {
        "target": "es5",
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true
    }
}
  • experimentalDecorators をいれないと、未来で仕様変わるかも?と警告が出てトランスパイル止められる。これは絶対気がつくので問題なし。
  • emitDecoratorMetadata をいれないと、一見したところトランスパイルも実行も問題なく動くように見えるけど、@Injectableが解決されずサイレントにundefinedで全滅。NestJSのIoTには実行時にTypeScriptの型を保持するというこのオプションが必要。NestJSのガイドの通りにreflect-metadataパッケージを追加 していたけど、emitDecoratorMetadataはガイドに書いてなかった。