TypeScript/tests/baselines/reference/promiseChaining1.types
Wesley Wigham 5353475fce Always collect type and symbol baselines (#18621)
* Always generate type & symbol baselines

* Accept changed shadowed baselines

* Accept brand new type and symbol baselines

* Allow `getTypeAtLocation` to return undefined in the type writer

* Accept baselines which had missing type information

* Bind container for dynamically names enum members so they may be printed

* Accept type/symbol baselines for enums with computed members

* First pass at reducing typeWriter memory overhead

* Use generators to allow for type and symbol baselines with no cache

* Accept new baselines for tests whose output was fixed by better newline splitting

* Hard cap on number of declarations printed, cache declaration print text

* handle differing newlines better still to handle RWC newlines

* Lower abridging count, accept abridged baselines

* Limit max RWC error output size, limit RWC type and symbol baseline input size

* Move skip logic into type and symbol baseliner to streamline error handling

* Accept removal of empty baselines

* Canonicalize path earlier to handle odd paths in input files

* Do canonicalization earlier still, also ensure parallel perf profiles for different targets do not trample one another

* No need to pathify again
2017-09-22 15:52:04 -07:00

62 lines
1.7 KiB
Plaintext

=== tests/cases/compiler/promiseChaining1.ts ===
// same example but with constraints on each type parameter
class Chain2<T extends { length: number }> {
>Chain2 : Chain2<T>
>T : T
>length : number
constructor(public value: T) { }
>value : T
>T : T
then<S extends Function>(cb: (x: T) => S): Chain2<S> {
>then : <S extends Function>(cb: (x: T) => S) => Chain2<S>
>S : S
>Function : Function
>cb : (x: T) => S
>x : T
>T : T
>S : S
>Chain2 : Chain2<T>
>S : S
var result = cb(this.value);
>result : S
>cb(this.value) : S
>cb : (x: T) => S
>this.value : T
>this : this
>value : T
// should get a fresh type parameter which each then call
var z = this.then(x => result)/*S*/.then(x => "abc")/*Function*/.then(x => x.length)/*number*/; // Should error on "abc" because it is not a Function
>z : any
>this.then(x => result)/*S*/.then(x => "abc")/*Function*/.then(x => x.length) : any
>this.then(x => result)/*S*/.then(x => "abc")/*Function*/.then : any
>this.then(x => result)/*S*/.then(x => "abc") : any
>this.then(x => result)/*S*/.then : <S extends Function>(cb: (x: S) => S) => Chain2<S>
>this.then(x => result) : Chain2<S>
>this.then : <S extends Function>(cb: (x: T) => S) => Chain2<S>
>this : this
>then : <S extends Function>(cb: (x: T) => S) => Chain2<S>
>x => result : (x: T) => S
>x : T
>result : S
>then : <S extends Function>(cb: (x: S) => S) => Chain2<S>
>x => "abc" : (x: S) => string
>x : S
>"abc" : "abc"
>then : any
>x => x.length : (x: any) => any
>x : any
>x.length : any
>x : any
>length : any
return new Chain2(result);
>new Chain2(result) : Chain2<S>
>Chain2 : typeof Chain2
>result : S
}
}