1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
//// [objectLiteralContextualTyping.ts]
// In a contextually typed object literal, each property value expression is contextually typed by
// the type of the property with a matching name in the contextual type, if any, or otherwise
// for a numerically named property, the numeric index type of the contextual type, if any, or otherwise
// the string index type of the contextual type, if any.
interface Item {
name: string;
description?: string;
}
declare function foo(item: Item): string;
declare function foo(item: any): number;
var x = foo({ name: "Sprocket" });
var x: string;
var y = foo({ name: "Sprocket", description: "Bumpy wheel" });
var y: string;
var z = foo({ name: "Sprocket", description: false });
var z: number;
var w = foo({ a: 10 });
var w: number;
declare function bar<T>(param: { x?: T }): T;
var b = bar({});
var b: {};
//// [objectLiteralContextualTyping.js]
// In a contextually typed object literal, each property value expression is contextually typed by
// the type of the property with a matching name in the contextual type, if any, or otherwise
// for a numerically named property, the numeric index type of the contextual type, if any, or otherwise
// the string index type of the contextual type, if any.
var x = foo({ name: "Sprocket" });
var x;
var y = foo({ name: "Sprocket", description: "Bumpy wheel" });
var y;
var z = foo({ name: "Sprocket", description: false });
var z;
var w = foo({ a: 10 });
var w;
var b = bar({});
var b;
|