TypeScript/tests/baselines/reference/elementAccessChain.3.types
Anders Hejlsberg d4792062bf
Variadic tuple types (#39094)
* 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
2020-06-22 18:35:43 -07:00

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[]