2014-07-13 01:04:16 +02:00
//// [promiseChaining1.ts]
// same example but with constraints on each type parameter
class Chain2 < T extends { length : number } > {
constructor ( public value : T ) { }
then < S extends Function > ( cb : ( x : T ) => S ) : Chain2 < S > {
var result = cb ( this . value ) ;
// 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
return new Chain2 ( result ) ;
}
}
//// [promiseChaining1.js]
2014-08-14 15:42:18 +02:00
// same example but with constraints on each type parameter
2014-07-13 01:04:16 +02:00
var Chain2 = ( function ( ) {
function Chain2 ( value ) {
this . value = value ;
}
Chain2 . prototype . then = function ( cb ) {
var result = cb ( this . value ) ;
2014-08-12 00:54:12 +02:00
// should get a fresh type parameter which each then call
2015-01-23 00:58:00 +01:00
var z = this . then ( function ( x ) { return result ; } ) /*S*/ . then ( function ( x ) { return "abc" ; } ) /*Function*/ . then ( function ( x ) { return x . length ; } ) ; // Should error on "abc" because it is not a Function
2014-07-13 01:04:16 +02:00
return new Chain2 ( result ) ;
} ;
return Chain2 ;
} ) ( ) ;