type T00 = Exclude‹"a" | "b" | "c" | "d", "a" | "c" | "f"›; // "b" | "d" type T01 = Extract‹"a" | "b" | "c" | "d", "a" | "c" | "f"›; // "a" | "c" // string | number type T02 = Exclude‹string | number | (() =› void), Function›; // () =› void type T03 = Extract‹string | number | (() =› void), Function›; // string | number type T04 = NonNullable‹string | number | undefined›; // (() =› string) | string[] type T05 = NonNullable‹(() =› string) | string[] | null | undefined›; function f1(s: string) { return { a: 1, b: s }; } class C { x = 0; y = 0; } type T10 = ReturnType‹() =› string›; // string type T11 = ReturnType‹(s: string) =› void›; // void type T12 = ReturnType‹(‹T›() =› T)›; // {} type T13 = ReturnType‹(‹T extends U, U extends number[]›() =› T)›; // number[] type T14 = ReturnType‹typeof f1›; // { a: number, b: string } type T15 = ReturnType‹any›; // any type T16 = ReturnType‹never›; // any type T17 = ReturnType‹string›; // Error type T18 = ReturnType‹Function›; // Error type T20 = InstanceType‹typeof C›; // C type T21 = InstanceType‹any›; // any type T22 = InstanceType‹never›; // any type T23 = InstanceType‹string›; // Error type T24 = InstanceType‹Function›; // Error