セットアップ
Nuxt TypeScript サポートは主に Nuxt モジュールである @nuxt/typescript-build を通して行われます。
ここではインストール方法と設定についてご紹介します。
インストール
yarn add --dev @nuxt/typescript-build @nuxt/types
npm install --save-dev @nuxt/typescript-build @nuxt/types
設定
必要なことは、nuxt.config.ts 内の buildModules に @nuxt/typescript-build を追加することです。
import type { NuxtConfig } from '@nuxt/types'
const config: NuxtConfig = {
  buildModules: ['@nuxt/typescript-build']
}
export default config
そして、tsconfig.json ファイルを作成します:
{
  "compilerOptions": {
    "target": "ES2018",
    "module": "ESNext",
    "moduleResolution": "Node",
    "lib": [
      "ESNext",
      "ESNext.AsyncIterable",
      "DOM"
    ],
    "esModuleInterop": true,
    "allowJs": true,
    "sourceMap": true,
    "strict": true,
    "noEmit": true,
    "baseUrl": ".",
    "paths": {
      "~/*": [
        "./*"
      ],
      "@/*": [
        "./*"
      ]
    },
    "types": [
      "@nuxt/types",
      "@nuxt/typescript-build",
      "@types/node"
    ]
  },
  "exclude": [
    "node_modules"
  ]
}
現時点では ESNext が Optional Chaining と Nullish Coalescing をサポートしていないようです。これらの機能を使えるようにするためにターゲットに ES2018 を指定する必要があることに注意してください。
また、以下の型宣言を追加し Vue ファイルの型を提供する必要があります:
declare module "*.vue" {
  import Vue from 'vue'
  export default Vue
}
このファイルはプロジェクトのルートディレクトリか types という名前のディレクトリに配置できます。カスタムディレクトリにも配置できますが、その場合は tsconfig.json ファイルに typeRoots を設定する必要があります。
さまざまなコンパイラオプションについては、公式の TypeScript ドキュメントを確認してください。
独自のサーバーフレームワークで Nuxt をプログラムにより使用している場合、ビルドを行う前に Nuxt の準備ができるまで待機する必要があることに注意してください:
// Make sure to wait for Nuxt to load @nuxt/typescript-build before proceeding
await nuxt.ready()
...
if (config.dev) {
  const builder = new Builder(nuxt)
  await builder.build()
}
これで layouts、components、plugins と middlewares で TypeScript が使えるように設定できました。
CookBook セクションで Nuxt プロジェクトの TypeScript レシピをみることができます。
モジュールのオプション
typeCheck
別プロセスで TypeScript の型チェックを有効にします。
- 型: BooleanまたはObject
- デフォルト: true
有効にすると、Nuxt.js は型チェックのために fork-ts-checker-webpack-plugin を使用します。
Object を使用して plugin オプションを上書きするか、false を設定して無効にできます。
ignoreNotFoundWarnings
not found に関する TypeScript の警告抑制を有効にします。
- 型: Boolean
- デフォルト: false
有効にすると、export ... was not found ... の警告が抑制されます。
背景についてはこちらをご覧ください。
警告: このプロパティは必要な警告まで抑制する可能性があります。設定するかどうか、慎重を期してください。
loaders
ts-loaderオプションのカスタマイズ
- 型: Object
TypeScript loader をさらにカスタマイズする必要がある場合は、loaders.ts および loaders.tsx モジュールのオプションを使用して ts と tsx ファイルの両方をカスタマイズできます:
import type { NuxtConfig } from '@nuxt/types'
const config: NuxtConfig = {
  typescript: {
    loaders: {
      ts: {
        silent: true
      },
      tsx: {
        silent: true
      }
    }
  }
}
export default config