型のバリエーション

ポモドーロテクニックは25分間集中して5分休憩する、ということだけど、25分ってけっこうあっという間だよなーと思っていた。 今日「50分集中して10分休憩」というソリューションを教わったので、昼間さっそく実践してみようと思う。 ちなみに朝活も50分間。

さて今日もがんばりましょう!!

型のバリエーション

・ number ・ string ・ boolean ・ symbol ・ null ・ undefined

0、’’(空文字)、null、undefined が false、それ以外は true

strictNullChecks オプションを有効にすると、厳密な Null 安全性を保証する。(tsconfig.json で設定する)

VSCodeだと、任意の変数の上にカーソルをホバーさせたときにポップアップで型を教えてくれる!

never

const greet = (friend: 'serval' | 'caracal' | 'cheetah') => {
  switch (friend) {
    case 'serval':
      return 'Hello, Serval!';
    case 'caracal':
      return 'Hello Caracal!';
    case 'cheetah':
      return 'Hello Cheetah!';
    default:
      const check: never = friend;
  }
};

console.log(greet('serval'));    // Hello, Serval!

このコードから case 'cheetah ではじまる2行を削除すると、コンパイルエラーが起きる。

配列とオブジェクト

型は合成できる

interface Foo { hoge?: number, fuga: string };
interface Bar { hoge: number };
interface Buz { piyo: string };

type FooBar1 = Foo & Bar;    // 交差型
type FooBar2 = Foo | Bar;    // 共用体型
type FooBuz1 = Foo & Buz;
type FooBuz2 = Foo | Buz;

Reactではコンポーネントの引数の型合成を行うことが多い。 同じ名前で複数回定義すると、上書きではなく継承されていくので注意。 拡張したいときは、型合成を行ってType Alias で穴めをつけるやり方がおすすめとのこと。

constで変数を定義した場合、変数自体の再代入はできないが各要素の上書きや追加はできる。 配列やオブジェクトの中身までイミュータブルにしたい場合、readonly をつける。

const arr1: ReadonlyArray<string> = ['foo', 'bar'];
const arr2: readonly string[] = ['foo', 'bar'];