はじめに
構造的型付けの意味を理解していなかったので、自分なりに噛み砕いてみました。
以下は本当に良い記事でした↓
構造的型付け
Typescriptは「構造的型付け」を型システムでは採用している。
例えば、カラスがいる。カラスを鳥という型かどうかをチェックしたい。
では、鳥は何を持って鳥とするのか?
クチバシがあること?羽があること?
そういったチェックを行う。
先に宣言し後で型チェック
type Bird = {
kuchibashi: boolean;
wing: boolean;
}
const karasu = {
kuchibashi: true,
wing: true,
age: 12
}
const bird: Bird = karasu
ここでは型Birdはageに対応していないがエラーになることはないです。
なぜなら、型Birdはspecies: string以外は言及しないから。だからageについては触れられない。
つまり、ここではカラスはBird型に当てはまるなら鳥だね!ってチェックしていることになります。
しかし、以下だとageが型Birdにないよ!って怒られます!
宣言するときに型をチェック
type Bird = {
kuchibashi: boolean;
wing: boolean;
}
const karasu: Bird = {
kuchibashi: true,
wing: true,
age: 12 //Object literal may only specify known properties, and 'age' does not exist in type 'Bird'.
}
先ほどはカラスを先に宣言していたのでkarasuが型Birdかどうかをチェックしていました。
今回は、型Birdの変数を作ると宣言しているときなので、Bird型のを作るって言ったじゃん!ageとか聞いてないんだけど!!ってなります。
おわりに
間違っているところ気になるところがございましたら教えていただけますと嬉しいです。