プロパティが初期化されていないエラー
TypeScriptを使用し始めると下記のようなコードで次のようなエラーに直面することがよくある。
class User {
id: number
name: string
constructor(id: number, name: string) {
Object.assign(this, {id, name})
}
}
const user = new User(123, 'sato')
console.log(user)
Property 'id' has no initializer and is not definitely assigned in the constructor.
日本語に訳すと以下のようになる。
プロパティ 'id' に初期化子がなく、コンストラクターで明確に割り当てられていません。
このエラーは次の2つの方法で出さないようにすることができる。
プロパティに「| undefined」を追加する
プロパティに「| undefined」を追加して初期化することでエラーが表示されなくなる。
class User {
id: number | undefined
name: string | undefined
constructor(id: number, name: string) {
Object.assign(this, {id, name})
}
}
const user = new User(123, 'sato')
console.log(user)
しかし、これだと毎回「| undefined」を追加しなくてはならなくて面倒なので、次項のtsconfig.jsonを修正してエラーを表示させない方法もよく利用される。
tsconfig.jsonに"strictPropertyInitialization": falseを追記
tsconfig.jsonに「"strictPropertyInitialization": false」を追記するとプロパティ初期化を厳格にチェックしなくなるためエラーが表示されなくなる。
ちなみにtsconfig.jsonが存在しない場合はプロパティ初期化のエラーは表示されないので、エラー表示を確認する場合はtsconfig.jsonを追加する必要がある。
npx tsc --initを実行すると簡単にtsconfig.jsonを追加できます。
※ typescriptを入れていない場合はインストールが必要。
npm i -D typescript npx tsc --init