Code Fix

初級

is not assignable to type の原因と直し方

変数への代入・関数の戻り値・プロパティへの代入など、宣言した型と違う型の値を渡そうとしたときにtscが検出するエラーです。TypeScriptで最初に出会うエラーの1つです。

エラーメッセージの読み方

main.ts(4,7): error TS2322: Type 'string' is not assignable to type 'number'.
main.ts
ファイル名
4
行番号
7
列番号 — この位置でtscが検査に失敗しました
TS2322
エラーコード — 検索するとTypeScriptの解説が見つかります
Type 'string' is not assignable to type 'number'.
内容 — 期待していたもの、または受け付けられなかったもの

このエラーが出る典型パターン

パターン1

 1  function summarize(age: number): string {
 2    return `age: ${age}`;
 3  }
 4  const age: number = "25";
                          ^
 5  console.log(summarize(age));
main.ts(4,7): error TS2322: Type 'string' is not assignable to type 'number'.

ageはnumber型として宣言されているため、文字列"25"は代入できません。数値リテラルの25を使う必要があります。

直し方: "25"25 にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  function square(n: number): number {
 2    return n + "!";
                ^
 3  }
 4  console.log(square(4));
main.ts(2,3): error TS2322: Type 'string' is not assignable to type 'number'.

戻り値の型はnumberと宣言されています。n + "!"は文字列になるため、この関数の戻り値としては使えません。

直し方: n + "!"n * n にします。

この問題を解いてみる →

パターン3

 1  interface Item {
 2    price: number;
 3  }
 4  const item: Item = { price: "9.99" };
                                   ^
 5  console.log(item.price);
main.ts(4,22): error TS2322: Type 'string' is not assignable to type 'number'.

Item.priceはnumber型なので、文字列の"9.99"は代入できません。数値の9.99を渡す必要があります。

直し方: "9.99"9.99 にします。

この問題を解いてみる →

よくある誤解

「JavaScriptは動的型付けだから緩いはず」という感覚のままだと、これが構文エラーではなく型エラーだと気づきにくいことがあります。tscは実行前に型だけを見て機械的に判定しており、値の意味は考慮しません。

まとめ

is not assignable to typeは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)