* Initial implementation of variadic tuple types * Accept new baselines * Handle variadic elements in tuple type inference * Special case inference between tuples with matching structure * Restore check that rest element is last element * Handle variadic tuples in relationship checking * Accept new baselines * Infer readonly constraints when inferring from readonly tuples * Fix lint issues * T assignable to readonly [...T] and [...T] assignable to T * Consistent tuple normalization * Create variadic tuple types from array literal expressions * Accept new baselines * Array literals have tuple types when contextual type is readonly * Accept new baselines * Optional elements before required elements become required elements * Update logic for rest parameters and spread arguments * Revert special case of contextual readonly array type * Accept new baselines * Fix lint issue * Switch entirely to createTupleType based on element flags * Don't infer readonly tuple types when inferring to variadic elements * Handle mapped types applied to generic tuple types * Handle constraint of indexed access type with generic tuple type * Accept new baselines * Address CR feedback * Simplify indexed access types involving generic tuple types * Propagate checkMode into getSpreadArgumentType * Guard against missing globalArrayType * Inference to [...T, ...U] based on implied arity of T * Accept new baselines * Add tests * Emit .d.ts from tests * Address CR feedback
191 lines
3.1 KiB
Plaintext
191 lines
3.1 KiB
Plaintext
=== tests/cases/conformance/expressions/optionalChaining/elementAccessChain/elementAccessChain.3.ts ===
|
|
declare const obj: any;
|
|
>obj : any
|
|
|
|
obj?.["a"]++;
|
|
>obj?.["a"]++ : number
|
|
>obj?.["a"] : any
|
|
>obj : any
|
|
>"a" : "a"
|
|
|
|
obj?.a["b"]++;
|
|
>obj?.a["b"]++ : number
|
|
>obj?.a["b"] : any
|
|
>obj?.a : any
|
|
>obj : any
|
|
>a : any
|
|
>"b" : "b"
|
|
|
|
obj?.["a"]--;
|
|
>obj?.["a"]-- : number
|
|
>obj?.["a"] : any
|
|
>obj : any
|
|
>"a" : "a"
|
|
|
|
obj?.a["b"]--;
|
|
>obj?.a["b"]-- : number
|
|
>obj?.a["b"] : any
|
|
>obj?.a : any
|
|
>obj : any
|
|
>a : any
|
|
>"b" : "b"
|
|
|
|
++obj?.["a"];
|
|
>++obj?.["a"] : number
|
|
>obj?.["a"] : any
|
|
>obj : any
|
|
>"a" : "a"
|
|
|
|
++obj?.a["b"];
|
|
>++obj?.a["b"] : number
|
|
>obj?.a["b"] : any
|
|
>obj?.a : any
|
|
>obj : any
|
|
>a : any
|
|
>"b" : "b"
|
|
|
|
--obj?.["a"];
|
|
>--obj?.["a"] : number
|
|
>obj?.["a"] : any
|
|
>obj : any
|
|
>"a" : "a"
|
|
|
|
--obj?.a["b"];
|
|
>--obj?.a["b"] : number
|
|
>obj?.a["b"] : any
|
|
>obj?.a : any
|
|
>obj : any
|
|
>a : any
|
|
>"b" : "b"
|
|
|
|
obj?.["a"] = 1;
|
|
>obj?.["a"] = 1 : 1
|
|
>obj?.["a"] : any
|
|
>obj : any
|
|
>"a" : "a"
|
|
>1 : 1
|
|
|
|
obj?.a["b"] = 1;
|
|
>obj?.a["b"] = 1 : 1
|
|
>obj?.a["b"] : any
|
|
>obj?.a : any
|
|
>obj : any
|
|
>a : any
|
|
>"b" : "b"
|
|
>1 : 1
|
|
|
|
obj?.["a"] += 1;
|
|
>obj?.["a"] += 1 : any
|
|
>obj?.["a"] : any
|
|
>obj : any
|
|
>"a" : "a"
|
|
>1 : 1
|
|
|
|
obj?.a["b"] += 1;
|
|
>obj?.a["b"] += 1 : any
|
|
>obj?.a["b"] : any
|
|
>obj?.a : any
|
|
>obj : any
|
|
>a : any
|
|
>"b" : "b"
|
|
>1 : 1
|
|
|
|
for (obj?.["a"] in {});
|
|
>obj?.["a"] : any
|
|
>obj : any
|
|
>"a" : "a"
|
|
>{} : {}
|
|
|
|
for (obj?.a["b"] in {});
|
|
>obj?.a["b"] : any
|
|
>obj?.a : any
|
|
>obj : any
|
|
>a : any
|
|
>"b" : "b"
|
|
>{} : {}
|
|
|
|
for (obj?.["a"] of []);
|
|
>obj?.["a"] : any
|
|
>obj : any
|
|
>"a" : "a"
|
|
>[] : never[]
|
|
|
|
for (obj?.a["b"] of []);
|
|
>obj?.a["b"] : any
|
|
>obj?.a : any
|
|
>obj : any
|
|
>a : any
|
|
>"b" : "b"
|
|
>[] : never[]
|
|
|
|
({ a: obj?.["a"] } = { a: 1 });
|
|
>({ a: obj?.["a"] } = { a: 1 }) : { a: number; }
|
|
>{ a: obj?.["a"] } = { a: 1 } : { a: number; }
|
|
>{ a: obj?.["a"] } : { a: any; }
|
|
>a : any
|
|
>obj?.["a"] : any
|
|
>obj : any
|
|
>"a" : "a"
|
|
>{ a: 1 } : { a: number; }
|
|
>a : number
|
|
>1 : 1
|
|
|
|
({ a: obj?.a["b"] } = { a: 1 });
|
|
>({ a: obj?.a["b"] } = { a: 1 }) : { a: number; }
|
|
>{ a: obj?.a["b"] } = { a: 1 } : { a: number; }
|
|
>{ a: obj?.a["b"] } : { a: any; }
|
|
>a : any
|
|
>obj?.a["b"] : any
|
|
>obj?.a : any
|
|
>obj : any
|
|
>a : any
|
|
>"b" : "b"
|
|
>{ a: 1 } : { a: number; }
|
|
>a : number
|
|
>1 : 1
|
|
|
|
({ ...obj?.["a"] } = { a: 1 });
|
|
>({ ...obj?.["a"] } = { a: 1 }) : { a: number; }
|
|
>{ ...obj?.["a"] } = { a: 1 } : { a: number; }
|
|
>{ ...obj?.["a"] } : any
|
|
>obj?.["a"] : any
|
|
>obj : any
|
|
>"a" : "a"
|
|
>{ a: 1 } : { a: number; }
|
|
>a : number
|
|
>1 : 1
|
|
|
|
({ ...obj?.a["b"] } = { a: 1 });
|
|
>({ ...obj?.a["b"] } = { a: 1 }) : { a: number; }
|
|
>{ ...obj?.a["b"] } = { a: 1 } : { a: number; }
|
|
>{ ...obj?.a["b"] } : any
|
|
>obj?.a["b"] : any
|
|
>obj?.a : any
|
|
>obj : any
|
|
>a : any
|
|
>"b" : "b"
|
|
>{ a: 1 } : { a: number; }
|
|
>a : number
|
|
>1 : 1
|
|
|
|
[...obj?.["a"]] = [];
|
|
>[...obj?.["a"]] = [] : never[]
|
|
>[...obj?.["a"]] : any[]
|
|
>...obj?.["a"] : any
|
|
>obj?.["a"] : any
|
|
>obj : any
|
|
>"a" : "a"
|
|
>[] : never[]
|
|
|
|
[...obj?.a["b"]] = [];
|
|
>[...obj?.a["b"]] = [] : never[]
|
|
>[...obj?.a["b"]] : any[]
|
|
>...obj?.a["b"] : any
|
|
>obj?.a["b"] : any
|
|
>obj?.a : any
|
|
>obj : any
|
|
>a : any
|
|
>"b" : "b"
|
|
>[] : never[]
|
|
|