プロを目指す人のためのTypeScript入門、読書メモ

読み終えた。入門~中級という感じだったかな。Typescriptの本なのでJavascriptの深いところまでの説明はなかった。

忘れそうなことメモ

  • TypeScript の数値はIEEE 754 倍精度浮動小数点数

    • 数値(仮数部)の精度が53 ビット
  • Falsyな値は、0, NaN, 0n, "", null, undefinedのみ。

  • 短絡評価

    • x || y は、xがfalsyのときのみyが評価される
    • x ?? y は、xnullまたはundefinedのときのみyが評価される。(空文字列を有効としたい場合)
    • x && yは、xがtruelyのときのみyが評価される。
  • 分割代入にもデフォルト値が設定できる。

type Obj = { foo?: number };
const obj1: Obj = {};
const { foo = 500 } = obj1;
expect(foo).toBe(500);

配列の分割代入はスキップできる

const arr = [1, 2, 4, 8, 16, 32];
const [, foo, , bar, , baz] = arr;

restパターン

const { foo, ...restObj } = obj;

ES2021

メソッド記法

メソッド記法で定義すると、メソッド代入時に、引数の部分型の判定が緩められるため、望ましくない。 必要がなければメソッド記法(method1)で関数型を定義するのは避けて通常の記法(method2)を用いるべき。

const obj = {
  method1(a: number): number {
    return a * 2;
  }
  method2 = (a: nubmer) => {
    return a * 2;
  }
}

class

privateはtypescriptの修飾子だが、Javascriptで実装された#もある。

overrideは実行には影響はないが、ミスを検出できる。 クラスに変数やメソッドを持たせる場合はstaticを使う。

Timeoutの実装

Promise.raceを使うと実装できる。ただし、実行している処理自体は途中で止まるわけではないことには注意が必要。

const res = await Promise.race([promise1, after1sReject]);
console.log({res});