1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
=== tests/cases/compiler/excessPropertyCheckIntersectionWithIndexSignature.ts ===
// Repro from #51875
let x: { [x: string]: { a: 0 } } & { [x: string]: { b: 0 } };
>x : { [x: string]: { a: 0; }; } & { [x: string]: { b: 0; }; }
>x : string
>a : 0
>x : string
>b : 0
x = { y: { a: 0 } }; // Error
>x = { y: { a: 0 } } : { y: { a: 0; }; }
>x : { [x: string]: { a: 0; }; } & { [x: string]: { b: 0; }; }
>{ y: { a: 0 } } : { y: { a: 0; }; }
>y : { a: 0; }
>{ a: 0 } : { a: 0; }
>a : 0
>0 : 0
x = { y: { a: 0, b: 0 } };
>x = { y: { a: 0, b: 0 } } : { y: { a: 0; b: 0; }; }
>x : { [x: string]: { a: 0; }; } & { [x: string]: { b: 0; }; }
>{ y: { a: 0, b: 0 } } : { y: { a: 0; b: 0; }; }
>y : { a: 0; b: 0; }
>{ a: 0, b: 0 } : { a: 0; b: 0; }
>a : 0
>0 : 0
>b : 0
>0 : 0
x = { y: { a: 0, b: 0, c: 0 } }; // Error
>x = { y: { a: 0, b: 0, c: 0 } } : { y: { a: 0; b: 0; c: number; }; }
>x : { [x: string]: { a: 0; }; } & { [x: string]: { b: 0; }; }
>{ y: { a: 0, b: 0, c: 0 } } : { y: { a: 0; b: 0; c: number; }; }
>y : { a: 0; b: 0; c: number; }
>{ a: 0, b: 0, c: 0 } : { a: 0; b: 0; c: number; }
>a : 0
>0 : 0
>b : 0
>0 : 0
>c : number
>0 : 0
type A = { a: string };
>A : { a: string; }
>a : string
type B = { b: string };
>B : { b: string; }
>b : string
const yy: Record<string, A> & Record<string, B> = {
>yy : Record<string, A> & Record<string, B>
>{ foo: { a: '', b: '' },} : { foo: { a: string; b: string; }; }
foo: { a: '', b: '' },
>foo : { a: string; b: string; }
>{ a: '', b: '' } : { a: string; b: string; }
>a : string
>'' : ""
>b : string
>'' : ""
};
|