0; if (t1 === undefined) return -1; if (t2 === undefined) return 1; // First sort in order of increasing type flags values. let c = getSortOrderFlags(t1) - getSortOrderFlags(t2); if (c !== 0) return c; // 以降、キー 2 以降の⽐較が続く } TypeFlags.String / Object / Union … の数値を引き算。差がついたら即 return 。 キー 1: 型のフラグ (種類) Copyright dip.inc All Rights Reserved. 21 / 33
of aliased types, // by alias type arguments. c = compareTypeNames(t1, t2); if (c !== 0) return c; // 以降、キー 3 以降の⽐較が続く キー 2: 型の「名前」 型エイリアスならその名前、クラス / インターフェースならシンボル名 文字列として比較 同じ「型の種類」の中をさらに名前で並べる Copyright dip.inc All Rights Reserved. 22 / 33
type creation order for built-in types. return t1.id - t2.id; 最後の手段: type ID へのフォールバック ここまで差がつかなかったときだけ ID を使う 主に any / unknown など組み込み型を安定化するためのフォールバック ユーザー定義の型同士でここまで落ちてくることはほぼない Copyright dip.inc All Rights Reserved. 24 / 33