// @strict: true function f1(x: T & U) { // Combined constraint of 'T & U' is 'string | number' let y: string | number = x; } function f2(x: T & U) { let y1: string | number = x; // Error let y2: string | null = x; // Error let y3: string | undefined = x; let y4: number | null = x; // Error let y5: number | undefined = x; // Error let y6: null | undefined = x; // Error } type T1 = (string | number | undefined) & (string | null | undefined); // string | undefined function f3(x: T & (number | object | undefined)) { const y: number | undefined = x; } function f4(x: T & (number | object)) { const y: number = x; } function f5(x: keyof T & U) { let y: keyof any = x; } // Repro from #23648 type Example = { [K in keyof T]: K extends keyof U ? UnexpectedError : NoErrorHere } type UnexpectedError = T type NoErrorHere = T // Repro from #30331 type a = T extends Array ? U : never; type b = { [K in a & keyof T ]: 42 };