T1 extends T2 ? F<T1> : never
- similar to
f(t1 as T2)
- similar to
- circularly references
{0: T1}[T extends any ? 0 : 0]
{0: T1, 1: T2}[CONDITION ? 0 : 1]
CONDITION ? T1 : T2
ts
// type GET_LAST<X extends LIST> =
// X extends [BIN, LIST] ? CAR<X> : GET_LAST<CDR<X>>
// NG: Type alias 'GET_LAST' circularly references itself.
type GET_LAST<X extends LIST> = {
0: CAR<X>,
1: GET_LAST<CDR<X>>
}[X extends [BIN, LIST] ? 0 : 1]
// OK
- CONDITION
N extends any
- true
any extends any
does not work
- true: any, false: never
N extends M ? ... : ...
の形でしか使えない