判別したい複数の型からなり、共通の[[判別プロパティ]]をもつ[[ユニオン型 (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>