|
| 1 | +=== tests/cases/compiler/spreadOfObjectLiteralAssignableToIndexSignature.ts === |
| 2 | +const foo: Record<never, never> = {} // OK |
| 3 | +>foo : Record<never, never> |
| 4 | +>{} : {} |
| 5 | + |
| 6 | +interface RecordOfRecords extends Record<keyof any, RecordOfRecords> {} |
| 7 | +const recordOfRecords: RecordOfRecords = {} |
| 8 | +>recordOfRecords : RecordOfRecords |
| 9 | +>{} : {} |
| 10 | + |
| 11 | +recordOfRecords.propA = {...(foo !== undefined ? {foo} : {})} // OK |
| 12 | +>recordOfRecords.propA = {...(foo !== undefined ? {foo} : {})} : { foo: Record<never, never>; } | {} |
| 13 | +>recordOfRecords.propA : RecordOfRecords |
| 14 | +>recordOfRecords : RecordOfRecords |
| 15 | +>propA : RecordOfRecords |
| 16 | +>{...(foo !== undefined ? {foo} : {})} : { foo: Record<never, never>; } | {} |
| 17 | +>(foo !== undefined ? {foo} : {}) : { foo: Record<never, never>; } | {} |
| 18 | +>foo !== undefined ? {foo} : {} : { foo: Record<never, never>; } | {} |
| 19 | +>foo !== undefined : boolean |
| 20 | +>foo : Record<never, never> |
| 21 | +>undefined : undefined |
| 22 | +>{foo} : { foo: Record<never, never>; } |
| 23 | +>foo : Record<never, never> |
| 24 | +>{} : {} |
| 25 | + |
| 26 | +recordOfRecords.propB = {...(foo && {foo})} // OK |
| 27 | +>recordOfRecords.propB = {...(foo && {foo})} : { foo: Record<never, never>; } |
| 28 | +>recordOfRecords.propB : RecordOfRecords |
| 29 | +>recordOfRecords : RecordOfRecords |
| 30 | +>propB : RecordOfRecords |
| 31 | +>{...(foo && {foo})} : { foo: Record<never, never>; } |
| 32 | +>(foo && {foo}) : { foo: Record<never, never>; } |
| 33 | +>foo && {foo} : { foo: Record<never, never>; } |
| 34 | +>foo : Record<never, never> |
| 35 | +>{foo} : { foo: Record<never, never>; } |
| 36 | +>foo : Record<never, never> |
| 37 | + |
| 38 | +recordOfRecords.propC = {...(foo !== undefined && {foo})} // error'd in 3.7 beta, should be OK |
| 39 | +>recordOfRecords.propC = {...(foo !== undefined && {foo})} : { foo: Record<never, never>; } | {} |
| 40 | +>recordOfRecords.propC : RecordOfRecords |
| 41 | +>recordOfRecords : RecordOfRecords |
| 42 | +>propC : RecordOfRecords |
| 43 | +>{...(foo !== undefined && {foo})} : { foo: Record<never, never>; } | {} |
| 44 | +>(foo !== undefined && {foo}) : false | { foo: Record<never, never>; } |
| 45 | +>foo !== undefined && {foo} : false | { foo: Record<never, never>; } |
| 46 | +>foo !== undefined : boolean |
| 47 | +>foo : Record<never, never> |
| 48 | +>undefined : undefined |
| 49 | +>{foo} : { foo: Record<never, never>; } |
| 50 | +>foo : Record<never, never> |
| 51 | + |
| 52 | +interface RecordOfRecordsOrEmpty extends Record<keyof any, RecordOfRecordsOrEmpty | {}> {} |
| 53 | +const recordsOfRecordsOrEmpty: RecordOfRecordsOrEmpty = {} |
| 54 | +>recordsOfRecordsOrEmpty : RecordOfRecordsOrEmpty |
| 55 | +>{} : {} |
| 56 | + |
| 57 | +recordsOfRecordsOrEmpty.propA = {...(foo !== undefined ? {foo} : {})} // OK |
| 58 | +>recordsOfRecordsOrEmpty.propA = {...(foo !== undefined ? {foo} : {})} : { foo: Record<never, never>; } | {} |
| 59 | +>recordsOfRecordsOrEmpty.propA : {} | RecordOfRecordsOrEmpty |
| 60 | +>recordsOfRecordsOrEmpty : RecordOfRecordsOrEmpty |
| 61 | +>propA : {} | RecordOfRecordsOrEmpty |
| 62 | +>{...(foo !== undefined ? {foo} : {})} : { foo: Record<never, never>; } | {} |
| 63 | +>(foo !== undefined ? {foo} : {}) : { foo: Record<never, never>; } | {} |
| 64 | +>foo !== undefined ? {foo} : {} : { foo: Record<never, never>; } | {} |
| 65 | +>foo !== undefined : boolean |
| 66 | +>foo : Record<never, never> |
| 67 | +>undefined : undefined |
| 68 | +>{foo} : { foo: Record<never, never>; } |
| 69 | +>foo : Record<never, never> |
| 70 | +>{} : {} |
| 71 | + |
| 72 | +recordsOfRecordsOrEmpty.propB = {...(foo && {foo})} // OK |
| 73 | +>recordsOfRecordsOrEmpty.propB = {...(foo && {foo})} : { foo: Record<never, never>; } |
| 74 | +>recordsOfRecordsOrEmpty.propB : {} | RecordOfRecordsOrEmpty |
| 75 | +>recordsOfRecordsOrEmpty : RecordOfRecordsOrEmpty |
| 76 | +>propB : {} | RecordOfRecordsOrEmpty |
| 77 | +>{...(foo && {foo})} : { foo: Record<never, never>; } |
| 78 | +>(foo && {foo}) : { foo: Record<never, never>; } |
| 79 | +>foo && {foo} : { foo: Record<never, never>; } |
| 80 | +>foo : Record<never, never> |
| 81 | +>{foo} : { foo: Record<never, never>; } |
| 82 | +>foo : Record<never, never> |
| 83 | + |
| 84 | +recordsOfRecordsOrEmpty.propC = {...(foo !== undefined && {foo})} // OK |
| 85 | +>recordsOfRecordsOrEmpty.propC = {...(foo !== undefined && {foo})} : { foo: Record<never, never>; } | {} |
| 86 | +>recordsOfRecordsOrEmpty.propC : {} | RecordOfRecordsOrEmpty |
| 87 | +>recordsOfRecordsOrEmpty : RecordOfRecordsOrEmpty |
| 88 | +>propC : {} | RecordOfRecordsOrEmpty |
| 89 | +>{...(foo !== undefined && {foo})} : { foo: Record<never, never>; } | {} |
| 90 | +>(foo !== undefined && {foo}) : false | { foo: Record<never, never>; } |
| 91 | +>foo !== undefined && {foo} : false | { foo: Record<never, never>; } |
| 92 | +>foo !== undefined : boolean |
| 93 | +>foo : Record<never, never> |
| 94 | +>undefined : undefined |
| 95 | +>{foo} : { foo: Record<never, never>; } |
| 96 | +>foo : Record<never, never> |
| 97 | + |
0 commit comments