LoginSignup
0
0

More than 3 years have passed since last update.

【TypeScript】色々な型定義についてpart2 〜備忘録〜

Posted at

まだまだ型定義について学んでいきます!

頑張っていきましょう!

readonlyとは

readonlyがついたプロパティは上書きすることができません!

object.ts
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にどんな型なのかを定義し、それを関数にあてることで型を定義する形です。
これをすることで、同じ型をいちいち定義することがなくなり、再利用することができます!

alies.ts
export const aliesSample = () => {
   type Country ={
        name : string,
        language : string,
        location : string,
        age: number
   }

   const japan: Country={
    name : '東京',
    language : '日本語',
    location : 'アジア',
    age : 100
   }

   console.log(japan);

合併型と交差型について

合併型・・・どちらかの型を持つ
交差型・・・両方の型を持つ

意味わからん。。。
実際にコードを書いていきます!

合併型

alies.ts
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型両方のプロパティが使える!!

交差型

alies.ts
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:'サーペンソーティア'を指定してない為、エラーが発生します。
交差型は全てのプロパティを使う必要がある為です!

これが合併型と交差型の違いです!

最後に

自分も合併型と交差型を使いこなせる自信がないので、色々いじっていきたいと思います!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0