くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

VSCode+TypeScriptでcatchのerrorがunknownになったときの対処法

VSCodeをアップデートしたら急にこんなエラーが出るようになった。。

f:id:wannabe-jellyfish:20210929144747p:plain

TypeScript4.4からcatchの変数はunknownにするオプションが
デフォルトでtrueになったららしい。。

TypeScript: TSConfig Reference - Docs on every TSConfig option

Announcing TypeScript 4.4 - TypeScript

try {
    executeSomeThirdPartyCode();
}
catch (err) { // err: unknown

    // Error! Property 'message' does not exist on type 'unknown'.
    console.error(err.message);

    // Works! We can narrow 'err' from 'unknown' to 'Error'.
    if (err instanceof Error) {
        console.error(err.message);
    }
}

ちゃんと型チェックしてねってことらしいけど、急なので困る。。

対処法1: TypeScriptのバージョンを合わせる

そもそもワークスペースVSCodeのTypeScriptのバージョンがあってなかった。。

.tsファイルを開くと右下にバージョンが出るのでクリック。

f:id:wannabe-jellyfish:20210929144831p:plain

すると、バージョンを変更するメニューが出る。

f:id:wannabe-jellyfish:20210929144902p:plain

ワークスペースと同じバージョンを利用するように変更

f:id:wannabe-jellyfish:20210929145102p:plain

すると、設定ファイル(.vscode/settings.json)に以下が追記される。

// .vscode/settings.json
{
  "typescript.tsdk": "node_modules/typescript/lib"
}

変更すると、同じバージョンになるので、エラーが解消される!

f:id:wannabe-jellyfish:20210929145114p:plain

対処法2: useUnknownInCatchVariablesを無効にする

ワークスペースのバージョンも4.4だとだめだけど tsconfig.json自体のオプションを変更すればOK

{
  "compilerOptions": {
    "useUnknownInCatchVariablesを無効にする": false,
    // ...
  },
  // ...
}

以上!!

参考にしたサイト様