Test index [access] types inside spread types
This commit is contained in:
parent
f2d739ffcf
commit
f65dd2101c
3 changed files with 119 additions and 1 deletions
|
@ -14,9 +14,17 @@ tests/cases/conformance/types/spread/objectSpreadGeneric.ts(38,11): error TS2322
|
|||
tests/cases/conformance/types/spread/objectSpreadGeneric.ts(42,11): error TS2322: Type '{ firrrrrrst: string; ...T; second: string; ...U; third: string; }' is not assignable to type '{ first: string; ...T; second: string; ...U; third: string; }'.
|
||||
tests/cases/conformance/types/spread/objectSpreadGeneric.ts(44,11): error TS2322: Type '{ first: string; ...T; ssssssssecond: string; ...U; third: string; }' is not assignable to type '{ first: string; ...T; second: string; ...U; third: string; }'.
|
||||
tests/cases/conformance/types/spread/objectSpreadGeneric.ts(46,11): error TS2322: Type '{ first: string; ...T; second: string; ...U; thirrrrrrrd: string; }' is not assignable to type '{ first: string; ...T; second: string; ...U; third: string; }'.
|
||||
tests/cases/conformance/types/spread/objectSpreadGeneric.ts(57,5): error TS2322: Type '{ ...keyof U }' is not assignable to type '{ ...keyof T }'.
|
||||
tests/cases/conformance/types/spread/objectSpreadGeneric.ts(58,5): error TS2322: Type '{ ...keyof T }' is not assignable to type '{ ...keyof U }'.
|
||||
tests/cases/conformance/types/spread/objectSpreadGeneric.ts(61,5): error TS2322: Type '{ ...K }' is not assignable to type '{ ...keyof T }'.
|
||||
tests/cases/conformance/types/spread/objectSpreadGeneric.ts(62,5): error TS2322: Type '{ ...keyof T }' is not assignable to type '{ ...K }'.
|
||||
tests/cases/conformance/types/spread/objectSpreadGeneric.ts(63,5): error TS2322: Type '{ ...J }' is not assignable to type '{ ...keyof U }'.
|
||||
tests/cases/conformance/types/spread/objectSpreadGeneric.ts(64,5): error TS2322: Type '{ ...keyof U }' is not assignable to type '{ ...J }'.
|
||||
tests/cases/conformance/types/spread/objectSpreadGeneric.ts(70,5): error TS2322: Type '{ ...U[J] }' is not assignable to type '{ ...T[K] }'.
|
||||
tests/cases/conformance/types/spread/objectSpreadGeneric.ts(71,5): error TS2322: Type '{ ...T[K] }' is not assignable to type '{ ...U[J] }'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/types/spread/objectSpreadGeneric.ts (16 errors) ====
|
||||
==== tests/cases/conformance/types/spread/objectSpreadGeneric.ts (24 errors) ====
|
||||
function f<T, U, V>(t: T, u: U, v: V): void {
|
||||
let o: { ...T, ...U, ...V };
|
||||
let uus: { ...U, ...U};
|
||||
|
@ -97,4 +105,44 @@ tests/cases/conformance/types/spread/objectSpreadGeneric.ts(46,11): error TS2322
|
|||
!!! error TS2322: Type '{ first: string; ...T; second: string; ...U; thirrrrrrrd: string; }' is not assignable to type '{ first: string; ...T; second: string; ...U; third: string; }'.
|
||||
{ first: '1', ...t, second: '2', ...u, thirrrrrrrd: '3' }; // error, not assignable
|
||||
}
|
||||
|
||||
function indexAccessedTest<T, K extends keyof T, U, J extends keyof U>(t: T, u: U, key1: K, key2: J) {
|
||||
let k1: { ...keyof T };
|
||||
let k2: { ...keyof U };
|
||||
let k3: { ...K };
|
||||
let k4: { ...J };
|
||||
k1 = k1; // ok
|
||||
k2 = k2; // ok
|
||||
k1 = k2; // error
|
||||
~~
|
||||
!!! error TS2322: Type '{ ...keyof U }' is not assignable to type '{ ...keyof T }'.
|
||||
k2 = k1; // error
|
||||
~~
|
||||
!!! error TS2322: Type '{ ...keyof T }' is not assignable to type '{ ...keyof U }'.
|
||||
k3 = k3; // ok
|
||||
k4 = k4; // ok
|
||||
k1 = k3; // error
|
||||
~~
|
||||
!!! error TS2322: Type '{ ...K }' is not assignable to type '{ ...keyof T }'.
|
||||
k3 = k1; // error
|
||||
~~
|
||||
!!! error TS2322: Type '{ ...keyof T }' is not assignable to type '{ ...K }'.
|
||||
k2 = k4; // error
|
||||
~~
|
||||
!!! error TS2322: Type '{ ...J }' is not assignable to type '{ ...keyof U }'.
|
||||
k4 = k2; // error
|
||||
~~
|
||||
!!! error TS2322: Type '{ ...keyof U }' is not assignable to type '{ ...J }'.
|
||||
|
||||
let i1: { ...T[K] };
|
||||
let i2: { ...U[J] };
|
||||
i1 = i1; // ok
|
||||
i2 = i2; // ok
|
||||
i1 = i2; // error
|
||||
~~
|
||||
!!! error TS2322: Type '{ ...U[J] }' is not assignable to type '{ ...T[K] }'.
|
||||
i2 = i1; // error
|
||||
~~
|
||||
!!! error TS2322: Type '{ ...T[K] }' is not assignable to type '{ ...U[J] }'.
|
||||
}
|
||||
|
|
@ -47,6 +47,30 @@ function f<T, U, V>(t: T, u: U, v: V): void {
|
|||
const mismatchLast: { first: string, ...T, second: string, ...U, third: string } =
|
||||
{ first: '1', ...t, second: '2', ...u, thirrrrrrrd: '3' }; // error, not assignable
|
||||
}
|
||||
|
||||
function indexAccessedTest<T, K extends keyof T, U, J extends keyof U>(t: T, u: U, key1: K, key2: J) {
|
||||
let k1: { ...keyof T };
|
||||
let k2: { ...keyof U };
|
||||
let k3: { ...K };
|
||||
let k4: { ...J };
|
||||
k1 = k1; // ok
|
||||
k2 = k2; // ok
|
||||
k1 = k2; // error
|
||||
k2 = k1; // error
|
||||
k3 = k3; // ok
|
||||
k4 = k4; // ok
|
||||
k1 = k3; // error
|
||||
k3 = k1; // error
|
||||
k2 = k4; // error
|
||||
k4 = k2; // error
|
||||
|
||||
let i1: { ...T[K] };
|
||||
let i2: { ...U[J] };
|
||||
i1 = i1; // ok
|
||||
i2 = i2; // ok
|
||||
i1 = i2; // error
|
||||
i2 = i1; // error
|
||||
}
|
||||
|
||||
|
||||
//// [objectSpreadGeneric.js]
|
||||
|
@ -93,3 +117,25 @@ function f(t, u, v) {
|
|||
var mismatchSecond = __assign({ first: '1' }, t, { ssssssssecond: '2' }, u, { third: '3' }); // error, not assignable
|
||||
var mismatchLast = __assign({ first: '1' }, t, { second: '2' }, u, { thirrrrrrrd: '3' }); // error, not assignable
|
||||
}
|
||||
function indexAccessedTest(t, u, key1, key2) {
|
||||
var k1;
|
||||
var k2;
|
||||
var k3;
|
||||
var k4;
|
||||
k1 = k1; // ok
|
||||
k2 = k2; // ok
|
||||
k1 = k2; // error
|
||||
k2 = k1; // error
|
||||
k3 = k3; // ok
|
||||
k4 = k4; // ok
|
||||
k1 = k3; // error
|
||||
k3 = k1; // error
|
||||
k2 = k4; // error
|
||||
k4 = k2; // error
|
||||
var i1;
|
||||
var i2;
|
||||
i1 = i1; // ok
|
||||
i2 = i2; // ok
|
||||
i1 = i2; // error
|
||||
i2 = i1; // error
|
||||
}
|
||||
|
|
|
@ -46,3 +46,27 @@ function f<T, U, V>(t: T, u: U, v: V): void {
|
|||
const mismatchLast: { first: string, ...T, second: string, ...U, third: string } =
|
||||
{ first: '1', ...t, second: '2', ...u, thirrrrrrrd: '3' }; // error, not assignable
|
||||
}
|
||||
|
||||
function indexAccessedTest<T, K extends keyof T, U, J extends keyof U>(t: T, u: U, key1: K, key2: J) {
|
||||
let k1: { ...keyof T };
|
||||
let k2: { ...keyof U };
|
||||
let k3: { ...K };
|
||||
let k4: { ...J };
|
||||
k1 = k1; // ok
|
||||
k2 = k2; // ok
|
||||
k1 = k2; // error
|
||||
k2 = k1; // error
|
||||
k3 = k3; // ok
|
||||
k4 = k4; // ok
|
||||
k1 = k3; // error
|
||||
k3 = k1; // error
|
||||
k2 = k4; // error
|
||||
k4 = k2; // error
|
||||
|
||||
let i1: { ...T[K] };
|
||||
let i2: { ...U[J] };
|
||||
i1 = i1; // ok
|
||||
i2 = i2; // ok
|
||||
i1 = i2; // error
|
||||
i2 = i1; // error
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue