なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

The inferred type of 'X' cannot be named without a reference to 'Y'. This is likely not portable. A type annotation is necessary.

pnpm 使って特定の tsconfig.json (Vite のデフォルトの tsconfig.json など) を参照した状態で tsc を走らせると、型エラーが出ることがある。
下記は、その例:

The inferred type of 'default' cannot be named without a reference to '.pnpm/vite@5.0.12_@types+node@20.11.16/node_modules/vite'. This is likely not portable. A type annotation is necessary.ts(2742)

関連 Issue は microsoft/TypeScript#42873 で、ちょうど 2 年前くらいから開かれていて、今でも書き込みがされていたり、参照されていたりする Issue。
この Issue に書かれた再現方法はいくつかあるが、基本的には pnpm を使っていて、同じパッケージが複数箇所にある (declaration: true があれば、おそらく常時) 場合にエラーが発生するとある。
解決方法としては、今回の場合、 vite に関する型 (タイトルで言えば Y に関する型) が解決出来ないと言われているので、下記のようにすれば、一応治る:

import type {} from "vite";

// タイトルの場合は
import type {} from "Y";

解決策が集められているコメントもあるので、もし遭遇した場合は自分に合ったものを採用すると良さそう: