まだまだ型定義について学んでいきます!
頑張っていきましょう!
#readonlyとは
readonlyがついたプロパティは上書きすることができません!
export const human = () => {
let person : {
age : number,
lastName : string,
readonly firstName : string,
}
person = {
age : 43,
lastName : 'kenshi',
firstName : 'takada',
}
console.log(person);
person.firstName = 'yoshida'
console.log(person);
}
person.firstName = 'yoshida'
と入力すると下記エラーが発生します!
「読み取り専用プロパティであるため、'firstName' に代入することはできません。」
これは firstNameにreadonlyをつけてる為、上書きができませんよ!と教えてくれてます!
それがreadonlyの挙動になります
#型エイリアス
よく見る構文ですよね!
事前にobjectにどんな型なのかを定義し、それを関数にあてることで型を定義する形です。
これをすることで、同じ型をいちいち定義することがなくなり、再利用することができます!
export const aliesSample = () => {
type Country ={
name : string,
language : string,
location : string,
age: number
}
const japan: Country={
name : '東京',
language : '日本語',
location : 'アジア',
age : 100
}
console.log(japan);
#合併型と交差型について
合併型・・・どちらかの型を持つ
交差型・・・両方の型を持つ
意味わからん。。。
実際にコードを書いていきます!
####合併型
type hero = {
hp:number,
attack:number,
swordSkill:string,
}
type badGuy = {
hp:number,
damage:number,
attack:number,
magicSkill:string,
}
type Adventurers = hero | badGuy
const adventurer4:Adventurers = {
hp:100,
attack:200,
swordSkill:'鬼斬'
}
const adventurer5:Adventurers = {
hp:600,
damage:192,
attack:100,
magicSkill:'サーペンソーティア',
}
type Adventurers = hero | badGuy
とすることで合併型を宣言します→「|」がまたはという意味。
console.log(adventurer4)
とすると
「{hp: 100, attack: 200, swordSkill: "鬼斬"}」が表示されます!
またconsole.log(adventurer5)
とすると
「{hp: 600, damage: 192, attack: 100, magicSkill: "サーペンソーティア"}」と表示されます!
合併型はhero, badGuy型両方のプロパティが使える!!
####交差型
type hero = {
hp:number,
attack:number,
swordSkill:string,
}
type badGuy = {
hp:number,
damage:number,
attack:number,
magicSkill:string,
}
type crossing = hero & badGuy
const adventurer6:crossing = {
hp:100,
attack:200,
swordSkill:'鬼斬',
damage:192,
magicSkill:'サーペンソーティア',
}
const adventurer7:crossing = {
hp:100,
attack:200,
swordSkill:'鬼斬',
damage:192,
}
adventurer6は合併型同様hero, badGuy型両方のプロパティが使えます!
しかし、adventurer7では、magicSkill:'サーペンソーティア'
を指定してない為、エラーが発生します。
交差型は全てのプロパティを使う必要がある為です!
これが合併型と交差型の違いです!
#最後に
自分も合併型と交差型を使いこなせる自信がないので、色々いじっていきたいと思います!