Open8

明示的な型宣言とlib.d.tsの活用

ken7253ken7253
  • TypeScirptをテスト的に使いたいなら明示的な型宣言を活用したほうがいい
    • 関数で明示的な型宣言を使う例
  • lib.d.tsに定義されている型を利用する
    • 効率的にコードを書くために
    • 正確な定義ができるように
ken7253ken7253

lib.d.tsとはなにか

TypeScirpt自体に付属している標準的な機能などの型定義ファイル
DOMの型情報だったり、各種メソッドの型定義であったり。
TypeScriptをインストールしたらすぐにいろんな型定義が使えるのはこいつのおかげ。

nodeの場合は@types/nodeを別でインストール必要があるがこれはlib.d.tsにnodeの型定義情報が入っていないから。
https://typescript-jp.gitbook.io/deep-dive/type-system/lib.d.ts

ken7253ken7253

lib.d.tsを活用したコーディング例

IntersectionObserverを例として解説する。

型推論で行う場合

const config = {};
const callback = () => {};
const observer = new IntersectionObserver(callback, config);

明示的な型宣言

const config: IntersectionObserverInit = {};
const callback: IntersectionObserverCallback = () => {};
const observer: IntersectionObserver = new IntersectionObserver(
  callback,
  config
);
ken7253ken7253

型推論の場合はそれぞれの変数がIntersectionObserverの引数に入れられた時点で引数の型に合致するかチェックさせる。
一方で型宣言を行っている場合は変数の宣言時にIntersectionObserverInit型などの宣言した型を満たすかがチェックさせる

ken7253ken7253

読者対象

  • TypeScriptを書いたことがある人
  • 簡単なテストは型定義で済ませたい人

なんとなくTypeScirptは書けるけどなんとなく書いてるなって人向け
TypeScirptが書ける≒JavaScriptもある程度分かってるという前提で進めていく。

ken7253ken7253

なんで型推論が働いているのに明示的に型を書くのか

※以降は関数のお話

ken7253ken7253

型推論と明示的な型定義の使い分け

  • 型定義は書いておいたほうがいい
  • 型推論でもいい場面と型定義を書いたほうがいい場面の違いとは
    • 一時的な変数には不要
    • 関数・クラスのメソッド内部など外部から参照されない想定の箇所も不要
    • 定義している箇所と呼び出している箇所が遠ければ積極的に型定義を書く
      • 異なるファイル(モジュール)の場合
      • 複数の箇所から呼ばれている関数
  • 型推論のほうがいい場合もあるので100%型定義を書こうとしない