Web

Nuxt3でpluginsのファイルを呼び出すとtsエラーになる

Nuxt3でpluginsにあるファイルから呼び出した際、ファイルがunkown型になるというtsエラーが出て、解決できずに試行錯誤したので、メモ。結果的にはエラーは出ないけど、解決していないような一時しのぎのような状態です。

Copilotからの提案

tsエラーをどうしたものか尋ねると、公式サイトにある以下の定義をするべきとのこと。早速、index.d.tsを作って、記述しました。

plugins/ · Nuxt Directory Structure
Nuxt has a plugins system to use Vue plugins and more at the…

interface NuxtAppinterface ComponentCustomPropertiesは両方同じ内容を記述した方が良いらしいんですが、使っている場所で分けたかったので、以下のような記述にしています。interface ComponentCustomProperties<template></template>の中で記述する際に使用するみたいで、ここで使った$filterはこれでエラーを解消できました。interface NuxtApp<script></script>内で使用するそうですが、ここで定義してもエラーは解消できません。なんでだろう??

import type { JsonArray } from '~/types/jsonarray';

declare module '#app' {
  interface NuxtApp {
    $getTypes(jsonData: JsonArray[]): { [key: string]: number }
    $getGenerations(jsonData: JsonArray[]): { [key: string]: number }
    $getPlaces(jsonData: JsonArray[]): { [key: string]: number }
    $getSex(jsonData: JsonArray[]): number
  }
}

declare module 'vue' {
  interface ComponentCustomProperties {
    $filter(val: number): number
  }
}

export {}

人力検索で可能性を見つける

仕方ないので検索して探すと、ちょうど当てはまりそうな事例がありました。以下には何通りかの解決方法があり、それぞれ試してみることに。

useNuxtApp() helper returns type unknown · Issue #20390 · nuxt/nuxt
Environment Operating System: Darwin Node Version: v18.0.0 N…

結果的に私の場合は、tsconfig.jsoncompilerOptionsからbaseUrlpathstypesをコメントアウトするとtsエラーを返すことはなくなりました。ただ、うまく設定していれば、エラーは出ないはずなので、このあたりの設定をどうするかの謎が残っています。ちなみ、現在の設定は以下です。

{
  // https://nuxt.com/docs/guide/concepts/typescript
  "compilerOptions": {
    // "baseUrl": ".",
    "lib": ["dom", "esnext"],
    // "paths": {
    //   "~/*": [
    //     "*",
    //     "./src/*"
    //   ],
    //   "@/*": ["./src/*"]
    // },
    "sourceMap": true,
    "strict": true,
    "traceResolution": true,
    // "types": ["vitest/globals"]
  },
  "extends": "./.nuxt/tsconfig.json",
}

コメント