Property does not exist on type の原因と直し方
型に定義されていないプロパティ名でアクセスしようとしたときに出るエラーです。プロパティ名のタイプミスが典型的な原因で、近い名前があれば候補も表示されます。
エラーメッセージの読み方
main.ts(6,15): error TS2339: Property 'naem' does not exist on type 'User'.
main.ts- ファイル名
6- 行番号
15- 列番号 — この位置でtscが検査に失敗しました
TS2339- エラーコード — 検索するとTypeScriptの解説が見つかります
Property 'naem' does not exist on type 'User'.- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 interface User { 2 name: string; 3 age: number; 4 } 5 const u: User = { name: "Al", age: 30 }; 6 console.log(u.naem); ^
main.ts(6,15): error TS2339: Property 'naem' does not exist on type 'User'.
Userにnaemというプロパティはありません。nameのタイプミスです。
直し方: naem を name にします。
広告
広告スロット(未設定)
パターン2
1 interface Point { 2 x: number; 3 y: number; 4 } 5 const p: Point = { x: 1, y: 2 }; 6 console.log(p.z); ^
main.ts(6,15): error TS2339: Property 'z' does not exist on type 'Point'.
Pointにはxとyしかありません。zというプロパティは定義されていません。
直し方: z を y にします。
パターン3
1 interface Item { 2 price: number; 3 } 4 const item: Item = { price: 500 }; 5 console.log(item.prise); ^
main.ts(5,18): error TS2551: Property 'prise' does not exist on type 'Item'. Did you mean 'price'?
priceのタイプミスです。Itemにpriseというプロパティはありません。
直し方: prise を price にします。
パターン4
1 interface Animal { 2 name: string; 3 legs: number; 4 } 5 const a: Animal = { name: "Cat", legs: 4 }; 6 console.log(a.legz); ^
main.ts(6,15): error TS2339: Property 'legz' does not exist on type 'Animal'.
Animalにlegzというプロパティはありません。legsのタイプミスです。
直し方: legz を legs にします。
パターン5
1 interface Box { 2 width: number; 3 } 4 const b: Box = { width: 5 }; 5 console.log(b.widht); ^
main.ts(5,15): error TS2551: Property 'widht' does not exist on type 'Box'. Did you mean 'width'?
widthのタイプミスです。Boxにwidhtというプロパティはありません。
直し方: widht を width にします。
よくある誤解
「オブジェクトの中身は実行してみないと分からない」というJavaScript的な感覚は、型が付いたオブジェクトには当てはまりません。存在しないプロパティへのアクセスは、実行する前にtscが検出します。
実務での勘所
Did you mean提案は、綴りの近さ(編集距離、1文字の挿入・削除・置換で何回で変換できるかという指標)をもとに、その型が実際に持っているプロパティ名の中から近いものを探して表示しています。綴りが大きく異なる場合や、そもそも似た名前のプロパティが存在しない場合は、この提案自体が表示されません。提案が出ないからといって「近い名前が無いだけで、他に原因があるはず」と考える必要はなく、単に綴りが遠すぎるタイプミスであることも多いです。