@@ -452,3 +452,184 @@ let shortCutted: { a: number, b: string } = { ...o, a }
452452let spreadNonPrimitive = { ...<object>{}};
453453>spreadNonPrimitive : Symbol(spreadNonPrimitive, Decl(objectSpread.ts, 119, 3))
454454
455+ // generic spreads
456+
457+ function f<T, U>(t: T, u: U) {
458+ >f : Symbol(f, Decl(objectSpread.ts, 119, 42))
459+ >T : Symbol(T, Decl(objectSpread.ts, 123, 11))
460+ >U : Symbol(U, Decl(objectSpread.ts, 123, 13))
461+ >t : Symbol(t, Decl(objectSpread.ts, 123, 17))
462+ >T : Symbol(T, Decl(objectSpread.ts, 123, 11))
463+ >u : Symbol(u, Decl(objectSpread.ts, 123, 22))
464+ >U : Symbol(U, Decl(objectSpread.ts, 123, 13))
465+
466+ return { ...t, ...u, id: 'id' };
467+ >t : Symbol(t, Decl(objectSpread.ts, 123, 17))
468+ >u : Symbol(u, Decl(objectSpread.ts, 123, 22))
469+ >id : Symbol(id, Decl(objectSpread.ts, 124, 24))
470+ }
471+
472+ let exclusive: { id: string, a: number, b: string, c: string, d: boolean } =
473+ >exclusive : Symbol(exclusive, Decl(objectSpread.ts, 127, 3))
474+ >id : Symbol(id, Decl(objectSpread.ts, 127, 16))
475+ >a : Symbol(a, Decl(objectSpread.ts, 127, 28))
476+ >b : Symbol(b, Decl(objectSpread.ts, 127, 39))
477+ >c : Symbol(c, Decl(objectSpread.ts, 127, 50))
478+ >d : Symbol(d, Decl(objectSpread.ts, 127, 61))
479+
480+ f({ a: 1, b: 'yes' }, { c: 'no', d: false })
481+ >f : Symbol(f, Decl(objectSpread.ts, 119, 42))
482+ >a : Symbol(a, Decl(objectSpread.ts, 128, 7))
483+ >b : Symbol(b, Decl(objectSpread.ts, 128, 13))
484+ >c : Symbol(c, Decl(objectSpread.ts, 128, 27))
485+ >d : Symbol(d, Decl(objectSpread.ts, 128, 36))
486+
487+ let overlap: { id: string, a: number, b: string } =
488+ >overlap : Symbol(overlap, Decl(objectSpread.ts, 129, 3))
489+ >id : Symbol(id, Decl(objectSpread.ts, 129, 14))
490+ >a : Symbol(a, Decl(objectSpread.ts, 129, 26))
491+ >b : Symbol(b, Decl(objectSpread.ts, 129, 37))
492+
493+ f({ a: 1 }, { a: 2, b: 'extra' })
494+ >f : Symbol(f, Decl(objectSpread.ts, 119, 42))
495+ >a : Symbol(a, Decl(objectSpread.ts, 130, 7))
496+ >a : Symbol(a, Decl(objectSpread.ts, 130, 17))
497+ >b : Symbol(b, Decl(objectSpread.ts, 130, 23))
498+
499+ let overlapConflict: { id:string, a: string } =
500+ >overlapConflict : Symbol(overlapConflict, Decl(objectSpread.ts, 131, 3))
501+ >id : Symbol(id, Decl(objectSpread.ts, 131, 22))
502+ >a : Symbol(a, Decl(objectSpread.ts, 131, 33))
503+
504+ f({ a: 1 }, { a: 'mismatch' })
505+ >f : Symbol(f, Decl(objectSpread.ts, 119, 42))
506+ >a : Symbol(a, Decl(objectSpread.ts, 132, 7))
507+ >a : Symbol(a, Decl(objectSpread.ts, 132, 17))
508+
509+ let overwriteId: { id: string, a: number, c: number, d: string } =
510+ >overwriteId : Symbol(overwriteId, Decl(objectSpread.ts, 133, 3))
511+ >id : Symbol(id, Decl(objectSpread.ts, 133, 18))
512+ >a : Symbol(a, Decl(objectSpread.ts, 133, 30))
513+ >c : Symbol(c, Decl(objectSpread.ts, 133, 41))
514+ >d : Symbol(d, Decl(objectSpread.ts, 133, 52))
515+
516+ f({ a: 1, id: true }, { c: 1, d: 'no' })
517+ >f : Symbol(f, Decl(objectSpread.ts, 119, 42))
518+ >a : Symbol(a, Decl(objectSpread.ts, 134, 7))
519+ >id : Symbol(id, Decl(objectSpread.ts, 134, 13))
520+ >c : Symbol(c, Decl(objectSpread.ts, 134, 27))
521+ >d : Symbol(d, Decl(objectSpread.ts, 134, 33))
522+
523+ function genericSpread<T, U>(t: T, u: U, v: T | U, w: T | { s: string }, obj: { x: number }) {
524+ >genericSpread : Symbol(genericSpread, Decl(objectSpread.ts, 134, 44))
525+ >T : Symbol(T, Decl(objectSpread.ts, 136, 23))
526+ >U : Symbol(U, Decl(objectSpread.ts, 136, 25))
527+ >t : Symbol(t, Decl(objectSpread.ts, 136, 29))
528+ >T : Symbol(T, Decl(objectSpread.ts, 136, 23))
529+ >u : Symbol(u, Decl(objectSpread.ts, 136, 34))
530+ >U : Symbol(U, Decl(objectSpread.ts, 136, 25))
531+ >v : Symbol(v, Decl(objectSpread.ts, 136, 40))
532+ >T : Symbol(T, Decl(objectSpread.ts, 136, 23))
533+ >U : Symbol(U, Decl(objectSpread.ts, 136, 25))
534+ >w : Symbol(w, Decl(objectSpread.ts, 136, 50))
535+ >T : Symbol(T, Decl(objectSpread.ts, 136, 23))
536+ >s : Symbol(s, Decl(objectSpread.ts, 136, 59))
537+ >obj : Symbol(obj, Decl(objectSpread.ts, 136, 72))
538+ >x : Symbol(x, Decl(objectSpread.ts, 136, 79))
539+
540+ let x01 = { ...t };
541+ >x01 : Symbol(x01, Decl(objectSpread.ts, 137, 7))
542+ >t : Symbol(t, Decl(objectSpread.ts, 136, 29))
543+
544+ let x02 = { ...t, ...t };
545+ >x02 : Symbol(x02, Decl(objectSpread.ts, 138, 7))
546+ >t : Symbol(t, Decl(objectSpread.ts, 136, 29))
547+ >t : Symbol(t, Decl(objectSpread.ts, 136, 29))
548+
549+ let x03 = { ...t, ...u };
550+ >x03 : Symbol(x03, Decl(objectSpread.ts, 139, 7))
551+ >t : Symbol(t, Decl(objectSpread.ts, 136, 29))
552+ >u : Symbol(u, Decl(objectSpread.ts, 136, 34))
553+
554+ let x04 = { ...u, ...t };
555+ >x04 : Symbol(x04, Decl(objectSpread.ts, 140, 7))
556+ >u : Symbol(u, Decl(objectSpread.ts, 136, 34))
557+ >t : Symbol(t, Decl(objectSpread.ts, 136, 29))
558+
559+ let x05 = { a: 5, b: 'hi', ...t };
560+ >x05 : Symbol(x05, Decl(objectSpread.ts, 141, 7))
561+ >a : Symbol(a, Decl(objectSpread.ts, 141, 15))
562+ >b : Symbol(b, Decl(objectSpread.ts, 141, 21))
563+ >t : Symbol(t, Decl(objectSpread.ts, 136, 29))
564+
565+ let x06 = { ...t, a: 5, b: 'hi' };
566+ >x06 : Symbol(x06, Decl(objectSpread.ts, 142, 7))
567+ >t : Symbol(t, Decl(objectSpread.ts, 136, 29))
568+ >a : Symbol(a, Decl(objectSpread.ts, 142, 21))
569+ >b : Symbol(b, Decl(objectSpread.ts, 142, 27))
570+
571+ let x07 = { a: 5, b: 'hi', ...t, c: true, ...obj };
572+ >x07 : Symbol(x07, Decl(objectSpread.ts, 143, 7))
573+ >a : Symbol(a, Decl(objectSpread.ts, 143, 15))
574+ >b : Symbol(b, Decl(objectSpread.ts, 143, 21))
575+ >t : Symbol(t, Decl(objectSpread.ts, 136, 29))
576+ >c : Symbol(c, Decl(objectSpread.ts, 143, 36))
577+ >obj : Symbol(obj, Decl(objectSpread.ts, 136, 72))
578+
579+ let x09 = { a: 5, ...t, b: 'hi', c: true, ...obj };
580+ >x09 : Symbol(x09, Decl(objectSpread.ts, 144, 7))
581+ >a : Symbol(a, Decl(objectSpread.ts, 144, 15))
582+ >t : Symbol(t, Decl(objectSpread.ts, 136, 29))
583+ >b : Symbol(b, Decl(objectSpread.ts, 144, 27))
584+ >c : Symbol(c, Decl(objectSpread.ts, 144, 36))
585+ >obj : Symbol(obj, Decl(objectSpread.ts, 136, 72))
586+
587+ let x10 = { a: 5, ...t, b: 'hi', ...u, ...obj };
588+ >x10 : Symbol(x10, Decl(objectSpread.ts, 145, 7))
589+ >a : Symbol(a, Decl(objectSpread.ts, 145, 15))
590+ >t : Symbol(t, Decl(objectSpread.ts, 136, 29))
591+ >b : Symbol(b, Decl(objectSpread.ts, 145, 27))
592+ >u : Symbol(u, Decl(objectSpread.ts, 136, 34))
593+ >obj : Symbol(obj, Decl(objectSpread.ts, 136, 72))
594+
595+ let x11 = { ...v };
596+ >x11 : Symbol(x11, Decl(objectSpread.ts, 146, 7))
597+ >v : Symbol(v, Decl(objectSpread.ts, 136, 40))
598+
599+ let x12 = { ...v, ...obj };
600+ >x12 : Symbol(x12, Decl(objectSpread.ts, 147, 7))
601+ >v : Symbol(v, Decl(objectSpread.ts, 136, 40))
602+ >obj : Symbol(obj, Decl(objectSpread.ts, 136, 72))
603+
604+ let x13 = { ...w };
605+ >x13 : Symbol(x13, Decl(objectSpread.ts, 148, 7))
606+ >w : Symbol(w, Decl(objectSpread.ts, 136, 50))
607+
608+ let x14 = { ...w, ...obj };
609+ >x14 : Symbol(x14, Decl(objectSpread.ts, 149, 7))
610+ >w : Symbol(w, Decl(objectSpread.ts, 136, 50))
611+ >obj : Symbol(obj, Decl(objectSpread.ts, 136, 72))
612+
613+ let x15 = { ...t, ...v };
614+ >x15 : Symbol(x15, Decl(objectSpread.ts, 150, 7))
615+ >t : Symbol(t, Decl(objectSpread.ts, 136, 29))
616+ >v : Symbol(v, Decl(objectSpread.ts, 136, 40))
617+
618+ let x16 = { ...t, ...w };
619+ >x16 : Symbol(x16, Decl(objectSpread.ts, 151, 7))
620+ >t : Symbol(t, Decl(objectSpread.ts, 136, 29))
621+ >w : Symbol(w, Decl(objectSpread.ts, 136, 50))
622+
623+ let x17 = { ...t, ...w, ...obj };
624+ >x17 : Symbol(x17, Decl(objectSpread.ts, 152, 7))
625+ >t : Symbol(t, Decl(objectSpread.ts, 136, 29))
626+ >w : Symbol(w, Decl(objectSpread.ts, 136, 50))
627+ >obj : Symbol(obj, Decl(objectSpread.ts, 136, 72))
628+
629+ let x18 = { ...t, ...v, ...w };
630+ >x18 : Symbol(x18, Decl(objectSpread.ts, 153, 7))
631+ >t : Symbol(t, Decl(objectSpread.ts, 136, 29))
632+ >v : Symbol(v, Decl(objectSpread.ts, 136, 40))
633+ >w : Symbol(w, Decl(objectSpread.ts, 136, 50))
634+ }
635+
0 commit comments