判別したい複数の型からなり、共通の[[判別プロパティ]]をもつ[[ユニオン型 (TypeScript)|ユニオン型]]のこと。以下の`Animal`型がそれにあたる。
```ts
interface Fish {
kind: "fish"
swim(): void
}
interface Bird {
kind: "bird"
fly(): void
}
// Discriminated unions
type Animal = Fish | Bird
declare let fishOrBird: Animal;
if (fishOrBird.kind === "bird") {
// ^? let fishOrBird: Animal
fishOrBird
// ^? let fishOrBird: Bird
} else {
fishOrBird
// ^? let fishOrBird: Fish
}
```
<button class="playground"><a href="https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgGLAM4AtkG8BQyyA1qACYBcyARDJltYchgO7AC2AFAJRUBuAe2Bl8AX3yhIsRCgBCwKGTxNSISjQBGCsoyIwANgE8e-ISPH4A9JeQARTAigdQcSEoCuIYAJAZ8YQwAHFABBL3Y4fWQAXjR6ZAAfZHlFfHwyCAR9OCgUfQgwZDpsAHkoFPUwjkiAbgkYZE5irDKKgDpVJWjuzW1qbmUia2QAPQB+JmbW7SZh8bFkCH0MFAI9emnUoZt50SA">Playground</a></button>