はじめに
構造的型付けの意味を理解していなかったので、自分なりに噛み砕いてみました。
以下は本当に良い記事でした↓
構造的型付け
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
とか聞いてないんだけど!!ってなります。
おわりに
間違っているところ気になるところがございましたら教えていただけますと嬉しいです。