2015-01-22 23:52:15 +01:00
|
|
|
//// [objectLiteralContextualTyping.ts]
|
2015-04-17 05:01:29 +02:00
|
|
|
// 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.
|
2015-01-22 23:52:15 +01:00
|
|
|
|
|
|
|
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;
|
|
|
|
|
2015-01-23 00:12:55 +01:00
|
|
|
var z = foo({ name: "Sprocket", description: false });
|
2015-01-22 23:52:15 +01:00
|
|
|
var z: number;
|
2015-01-23 00:12:55 +01:00
|
|
|
|
|
|
|
var w = foo({ a: 10 });
|
|
|
|
var w: number;
|
|
|
|
|
|
|
|
declare function bar<T>(param: { x?: T }): T;
|
|
|
|
|
|
|
|
var b = bar({});
|
|
|
|
var b: {};
|
2015-01-22 23:52:15 +01:00
|
|
|
|
|
|
|
|
|
|
|
//// [objectLiteralContextualTyping.js]
|
2015-04-17 05:01:29 +02:00
|
|
|
// 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.
|
2015-03-26 21:46:35 +01:00
|
|
|
var x = foo({ name: "Sprocket" });
|
2015-01-22 23:52:15 +01:00
|
|
|
var x;
|
2015-03-26 21:46:35 +01:00
|
|
|
var y = foo({ name: "Sprocket", description: "Bumpy wheel" });
|
2015-01-22 23:52:15 +01:00
|
|
|
var y;
|
2015-03-26 21:46:35 +01:00
|
|
|
var z = foo({ name: "Sprocket", description: false });
|
2015-01-22 23:52:15 +01:00
|
|
|
var z;
|
2015-03-26 21:46:35 +01:00
|
|
|
var w = foo({ a: 10 });
|
2015-01-23 00:12:55 +01:00
|
|
|
var w;
|
|
|
|
var b = bar({});
|
|
|
|
var b;
|