インターセクション型の定義

インターセクション型というのは、交差している型の事を指す

&や|を使って二つの型を読み込む事で作成できる。

条件文を使って型を絞り込む方法

if(fuga typeof string ) // fuga型は"string"型なのか?
if("name" in fuga ) // fuga型の中に"name"プロパティはあるのか?
if(pet instanceOf "Bird") // petはBirdのインスタンスなのか?

タグ付きUnion型

interface dog {
kind: "sibaken",
name: string,
age: number
}
// プロパティの中に指定の文字列だけを含む事のできるリテラル型を入れておく事で

type pet = dog; 

// switch文などで型の判定ができる。
switch(pet.kind) {
	case: "sibaken"
	break;
}

型アサーションを使って、手動で型を上書きする方法

const input = documemt.getElementById('input');
// この場合型推論だとHTMLElement or Nullだと判定される。

input.value; // エラーが出る。HTMLElement型にはこのメソッドは存在しない為。

// なので手動でTypeを明示してやる必要がある

// やり方
const input = <HTMLInputElement>documemt.getElementById('input')
const input = documemt.getElementById('input') as HTMLInputElement

// どちらかの方法に統一するといい

TypeScriptの as って何です?(型アサーションについて) - Qiita

型アサーション(as)は移行期などの緊急の場合や有効な場合のみ使用し、多用しない方が良さそうです。

Nullじゃないと言い切る方法

const input = documemt.getElementById('input');
// 先程のinput、型推論に任せると HTMLElement or Nullだと判定される。

上記の変数はNullの可能性がある事を示唆されます。