created: 2024-04-05T09:01:00.366Z

[@types/eslint] Property 'scopes' in type 'ScopeManager' is not assignable をなんとかする

@types/eslint を入れると @types/eslint-scope の型定義とぶつかって tsc が通らなくなるということがあった。

$ npm run typecheck

> ui@1.0.0 typecheck
> tsc --noEmit

node_modules/@types/eslint-scope/index.d.ts:12:5 - error TS2416: Property 'scopes' in type 'ScopeManager' is not assignable to the same property in base type 'ScopeManager'.

これは npm パッケージは以下のバージョンで発生した。@types/eslint-scope は webpack が使っているもので依存の依存である。

$ npm ls @types/eslint
├── @types/eslint@8.56.7
$ npm ls @types/eslint-scope
└─┬ webpack@5.89.0
  └── @types/eslint-scope@3.7.3

なんとかする

たかが設定ファイルの型定義なので、これのために webpack を入れ直すのはちょっと億劫だった。依存モジュールを無理やりアップグレードする方法として package.json#overrides がある。

型定義なので依存関係の動作には影響がないものとして、これを最新にアップグレードしてしまう。

  "overrides": {
    "webpack": {
      "@types/eslint-scope": "^3.7.7"
    }
  }

この指定をして npm install を叩くと @types/eslint-scope@3.7.7 が入ってくれる。

$ npm ls @types/eslint-scope
...
└─┬ webpack@5.89.0 overridden
  └── @types/eslint-scope@3.7.7 overridden

このバージョンでは型定義が整合しているようで、tsc は通ってくれた。

$ npm run typecheck

> ui@1.0.0 typecheck
> tsc --noEmit

$
Good Code, Bad Code ~持続可能な開発のためのソフトウェアエンジニア的思考
[ad] Good Code, Bad Code ~持続可能な開発のためのソフトウェアエンジニア的思考
Tom Long, 秋勇紀 (単行本(ソフトカバー))