Motomichi Works Blog

モトミチワークスブログです。その日学習したことについて書いている日記みたいなものです。

TypeScript学習日記 その0007 構造的部分型について学習する

参考にさせていただいたページ

はじめに

きっかけとなったのはこちら「TypeScriptの型入門 - Qiita」の入門記事であり、キーが多い方が少ない方の部分型なの?って思って検索した次第です。
TypeScript の構造的部分型とプリミティブ型について - 30歳からのプログラミング」を読むことでとても理解が捗りました。

コードを書いてみる

以下のようなコードで、FooBarObj型はFooObj型の部分型と言える。

    type FooBarObj = {
      foo: string
      bar: number
    }
    type FooObj = {
      foo: string
    }

    // FooBarObj型の変数を定義する
    const fooBarObj: FooBarObj = {
      foo: 'foo',
      bar: 10,
    }

    // よりkeyが少ないFoo型に代入可能
    const fooObj: FooObj = fooBarObj

    // console.log(fooObj)で出力してみると { foo: 'foo', bar: 10 } という感じでキーは残っている
    console.log(fooObj)

    // FooObj型なので、console.log(fooObj.foo)はOK
    console.log(fooObj.foo)

    // FooObj型なので、console.log(fooObj.bar)はエラーになる
    console.log(fooObj.bar)

    // FooObj型の変数を、よりkeyが多いFooBarObj型に代入しなおすことはできないのでエラーになる
    const fooBarObj2: FooBarObj = fooObj
    console.log(fooBarObj2.bar)