//// [genericCallWithObjectTypeArgsAndConstraints2.ts] // Generic call with constraints infering type parameter from object member properties // No errors expected class Base { x: string; } class Derived extends Base { y: string; } function f(x: { foo: T; bar: T }) { var r: T; return r; } var r = f({ foo: new Base(), bar: new Derived() }); var r2 = f({ foo: new Derived(), bar: new Derived() }); interface I { a: T; } function f2(x: I) { var r: T; return r; } var i: I; var r3 = f2(i); function f3(x: T, y: (a: T) => T) { return y(null); } var r4 = f3(new Base(), x => x); var r5 = f3(new Derived(), x => x); var r6 = f3(null, null); // any var r7 = f3(null, x => x); // any //// [genericCallWithObjectTypeArgsAndConstraints2.js] // Generic call with constraints infering type parameter from object member properties // No errors expected var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; var Base = (function () { function Base() { } return Base; })(); var Derived = (function (_super) { __extends(Derived, _super); function Derived() { _super.apply(this, arguments); } return Derived; })(Base); function f(x) { var r; return r; } var r = f({ foo: new Base(), bar: new Derived() }); var r2 = f({ foo: new Derived(), bar: new Derived() }); function f2(x) { var r; return r; } var i; var r3 = f2(i); function f3(x, y) { return y(null); } var r4 = f3(new Base(), function (x) { return x; }); var r5 = f3(new Derived(), function (x) { return x; }); var r6 = f3(null, null); // any var r7 = f3(null, function (x) { return x; }); // any