From 44c5d87184506df18bde32bd911b7ffeb3a43956 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Fri, 28 Aug 2020 22:45:12 +0000 Subject: [PATCH] Accepted baselines. --- ...rorForFunctionExpressionReturns.errors.txt | 125 +++++++ ...opertyErrorForFunctionExpressionReturns.js | 180 ++++++++++ ...yErrorForFunctionExpressionReturns.symbols | 235 ++++++++++++ ...rtyErrorForFunctionExpressionReturns.types | 333 ++++++++++++++++++ 4 files changed, 873 insertions(+) create mode 100644 tests/baselines/reference/excessPropertyErrorForFunctionExpressionReturns.errors.txt create mode 100644 tests/baselines/reference/excessPropertyErrorForFunctionExpressionReturns.js create mode 100644 tests/baselines/reference/excessPropertyErrorForFunctionExpressionReturns.symbols create mode 100644 tests/baselines/reference/excessPropertyErrorForFunctionExpressionReturns.types diff --git a/tests/baselines/reference/excessPropertyErrorForFunctionExpressionReturns.errors.txt b/tests/baselines/reference/excessPropertyErrorForFunctionExpressionReturns.errors.txt new file mode 100644 index 00000000000..1551f6dd5d8 --- /dev/null +++ b/tests/baselines/reference/excessPropertyErrorForFunctionExpressionReturns.errors.txt @@ -0,0 +1,125 @@ +tests/cases/compiler/excessPropertyErrorForFunctionExpressionReturns.ts(21,19): error TS2345: Argument of type '{ a: number; b: number; }' is not assignable to parameter of type '{ a: number; b: number; c: number; }'. + Property 'c' is missing in type '{ a: number; b: number; }' but required in type '{ a: number; b: number; c: number; }'. +tests/cases/compiler/excessPropertyErrorForFunctionExpressionReturns.ts(27,47): error TS2345: Argument of type '{ a: number; b: number; c: number; }' is not assignable to parameter of type 'SomeObj1'. + Object literal may only specify known properties, and 'c' does not exist in type 'SomeObj1'. +tests/cases/compiler/excessPropertyErrorForFunctionExpressionReturns.ts(38,37): error TS2345: Argument of type '{ a: number; b: number; c: number; }' is not assignable to parameter of type '{ a: number; b: number; }'. + Object literal may only specify known properties, and 'c' does not exist in type '{ a: number; b: number; }'. +tests/cases/compiler/excessPropertyErrorForFunctionExpressionReturns.ts(64,19): error TS2345: Argument of type '{ a: number; b: number; }' is not assignable to parameter of type '{ a: number; b: number; c: number; }'. + Property 'c' is missing in type '{ a: number; b: number; }' but required in type '{ a: number; b: number; c: number; }'. +tests/cases/compiler/excessPropertyErrorForFunctionExpressionReturns.ts(72,47): error TS2345: Argument of type '{ a: number; b: number; c: number; }' is not assignable to parameter of type 'SomeObj1'. + Object literal may only specify known properties, and 'c' does not exist in type 'SomeObj1'. + + +==== tests/cases/compiler/excessPropertyErrorForFunctionExpressionReturns.ts (5 errors) ==== + export type SomeObj1 = { a: number, b: number }; + + declare function valueOrGetter(x: T, f: () => T): T; + + namespace arrows { + declare function consumeObj1(f: () => SomeObj1): void; + consumeObj1(() => ({ + a: 100, + b: 200, + c: 300, + })); + + function obj1FactoryFactory(): () => SomeObj1 { + return () => ({ + a: 100, + b: 200, + c: 300, + }); + } + + valueOrGetter({ a: 100, b: 200 }, () => ({ + ~~~~~~~~~~~~~~~~~~ +!!! error TS2345: Argument of type '{ a: number; b: number; }' is not assignable to parameter of type '{ a: number; b: number; c: number; }'. +!!! error TS2345: Property 'c' is missing in type '{ a: number; b: number; }' but required in type '{ a: number; b: number; c: number; }'. +!!! related TS2728 tests/cases/compiler/excessPropertyErrorForFunctionExpressionReturns.ts:24:9: 'c' is declared here. + a: 100, + b: 200, + c: 300, + })); + + valueOrGetter({ a: 100, b: 200, c: 300 }, () => ({ + ~~~~~~ +!!! error TS2345: Argument of type '{ a: number; b: number; c: number; }' is not assignable to parameter of type 'SomeObj1'. +!!! error TS2345: Object literal may only specify known properties, and 'c' does not exist in type 'SomeObj1'. + a: 100, + b: 200, + })); + + valueOrGetter({ a: 100, b: 200 }, () => ({ + a: 100, + b: 200, + c: 300, + })); + + valueOrGetter({ a: 100, b: 200, c: 300 }, () => ({ + ~~~~~~ +!!! error TS2345: Argument of type '{ a: number; b: number; c: number; }' is not assignable to parameter of type '{ a: number; b: number; }'. +!!! error TS2345: Object literal may only specify known properties, and 'c' does not exist in type '{ a: number; b: number; }'. + a: 100, + b: 200, + })); + } + + namespace funcExprs { + declare function consumeObj1(f: () => SomeObj1): void; + consumeObj1(function() { + return { + a: 100, + b: 200, + c: 300, + }; + }); + + function obj1FactoryFactory(): () => SomeObj1 { + return function() { + return { + a: 100, + b: 200, + c: 300, + } + }; + } + + valueOrGetter({ a: 100, b: 200 }, function() { + ~~~~~~~~~~~~~~~~~~ +!!! error TS2345: Argument of type '{ a: number; b: number; }' is not assignable to parameter of type '{ a: number; b: number; c: number; }'. +!!! error TS2345: Property 'c' is missing in type '{ a: number; b: number; }' but required in type '{ a: number; b: number; c: number; }'. +!!! related TS2728 tests/cases/compiler/excessPropertyErrorForFunctionExpressionReturns.ts:68:13: 'c' is declared here. + return { + a: 100, + b: 200, + c: 300, + }; + }); + + valueOrGetter({ a: 100, b: 200, c: 300 }, function() { + ~~~~~~ +!!! error TS2345: Argument of type '{ a: number; b: number; c: number; }' is not assignable to parameter of type 'SomeObj1'. +!!! error TS2345: Object literal may only specify known properties, and 'c' does not exist in type 'SomeObj1'. + return { + a: 100, + b: 200, + c: 300, + }; + }); + + valueOrGetter({ a: 100, b: 200 }, function() { + return { + a: 100, + b: 200, + c: 300, + }; + }); + + valueOrGetter({ a: 100, b: 200, c: 300 }, function() { + return { + a: 100, + b: 200, + c: 300, + }; + }); + } \ No newline at end of file diff --git a/tests/baselines/reference/excessPropertyErrorForFunctionExpressionReturns.js b/tests/baselines/reference/excessPropertyErrorForFunctionExpressionReturns.js new file mode 100644 index 00000000000..92f183f5b86 --- /dev/null +++ b/tests/baselines/reference/excessPropertyErrorForFunctionExpressionReturns.js @@ -0,0 +1,180 @@ +//// [excessPropertyErrorForFunctionExpressionReturns.ts] +export type SomeObj1 = { a: number, b: number }; + +declare function valueOrGetter(x: T, f: () => T): T; + +namespace arrows { + declare function consumeObj1(f: () => SomeObj1): void; + consumeObj1(() => ({ + a: 100, + b: 200, + c: 300, + })); + + function obj1FactoryFactory(): () => SomeObj1 { + return () => ({ + a: 100, + b: 200, + c: 300, + }); + } + + valueOrGetter({ a: 100, b: 200 }, () => ({ + a: 100, + b: 200, + c: 300, + })); + + valueOrGetter({ a: 100, b: 200, c: 300 }, () => ({ + a: 100, + b: 200, + })); + + valueOrGetter({ a: 100, b: 200 }, () => ({ + a: 100, + b: 200, + c: 300, + })); + + valueOrGetter({ a: 100, b: 200, c: 300 }, () => ({ + a: 100, + b: 200, + })); +} + +namespace funcExprs { + declare function consumeObj1(f: () => SomeObj1): void; + consumeObj1(function() { + return { + a: 100, + b: 200, + c: 300, + }; + }); + + function obj1FactoryFactory(): () => SomeObj1 { + return function() { + return { + a: 100, + b: 200, + c: 300, + } + }; + } + + valueOrGetter({ a: 100, b: 200 }, function() { + return { + a: 100, + b: 200, + c: 300, + }; + }); + + valueOrGetter({ a: 100, b: 200, c: 300 }, function() { + return { + a: 100, + b: 200, + c: 300, + }; + }); + + valueOrGetter({ a: 100, b: 200 }, function() { + return { + a: 100, + b: 200, + c: 300, + }; + }); + + valueOrGetter({ a: 100, b: 200, c: 300 }, function() { + return { + a: 100, + b: 200, + c: 300, + }; + }); +} + +//// [excessPropertyErrorForFunctionExpressionReturns.js] +"use strict"; +exports.__esModule = true; +var arrows; +(function (arrows) { + consumeObj1(function () { return ({ + a: 100, + b: 200, + c: 300 + }); }); + function obj1FactoryFactory() { + return function () { return ({ + a: 100, + b: 200, + c: 300 + }); }; + } + valueOrGetter({ a: 100, b: 200 }, function () { return ({ + a: 100, + b: 200, + c: 300 + }); }); + valueOrGetter({ a: 100, b: 200, c: 300 }, function () { return ({ + a: 100, + b: 200 + }); }); + valueOrGetter({ a: 100, b: 200 }, function () { return ({ + a: 100, + b: 200, + c: 300 + }); }); + valueOrGetter({ a: 100, b: 200, c: 300 }, function () { return ({ + a: 100, + b: 200 + }); }); +})(arrows || (arrows = {})); +var funcExprs; +(function (funcExprs) { + consumeObj1(function () { + return { + a: 100, + b: 200, + c: 300 + }; + }); + function obj1FactoryFactory() { + return function () { + return { + a: 100, + b: 200, + c: 300 + }; + }; + } + valueOrGetter({ a: 100, b: 200 }, function () { + return { + a: 100, + b: 200, + c: 300 + }; + }); + valueOrGetter({ a: 100, b: 200, c: 300 }, function () { + return { + a: 100, + b: 200, + c: 300 + }; + }); + valueOrGetter({ a: 100, b: 200 }, function () { + return { + a: 100, + b: 200, + c: 300 + }; + }); + valueOrGetter({ a: 100, b: 200, c: 300 }, function () { + return { + a: 100, + b: 200, + c: 300 + }; + }); +})(funcExprs || (funcExprs = {})); diff --git a/tests/baselines/reference/excessPropertyErrorForFunctionExpressionReturns.symbols b/tests/baselines/reference/excessPropertyErrorForFunctionExpressionReturns.symbols new file mode 100644 index 00000000000..e9ebe3d1e90 --- /dev/null +++ b/tests/baselines/reference/excessPropertyErrorForFunctionExpressionReturns.symbols @@ -0,0 +1,235 @@ +=== tests/cases/compiler/excessPropertyErrorForFunctionExpressionReturns.ts === +export type SomeObj1 = { a: number, b: number }; +>SomeObj1 : Symbol(SomeObj1, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 0)) +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 24)) +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 35)) + +declare function valueOrGetter(x: T, f: () => T): T; +>valueOrGetter : Symbol(valueOrGetter, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 48)) +>T : Symbol(T, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 2, 31)) +>x : Symbol(x, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 2, 34)) +>T : Symbol(T, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 2, 31)) +>f : Symbol(f, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 2, 39)) +>T : Symbol(T, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 2, 31)) +>T : Symbol(T, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 2, 31)) + +namespace arrows { +>arrows : Symbol(arrows, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 2, 55)) + + declare function consumeObj1(f: () => SomeObj1): void; +>consumeObj1 : Symbol(consumeObj1, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 4, 18)) +>f : Symbol(f, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 5, 33)) +>SomeObj1 : Symbol(SomeObj1, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 0)) + + consumeObj1(() => ({ +>consumeObj1 : Symbol(consumeObj1, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 4, 18)) + + a: 100, +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 6, 24)) + + b: 200, +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 7, 15)) + + c: 300, +>c : Symbol(c, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 8, 15)) + + })); + + function obj1FactoryFactory(): () => SomeObj1 { +>obj1FactoryFactory : Symbol(obj1FactoryFactory, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 10, 8)) +>SomeObj1 : Symbol(SomeObj1, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 0)) + + return () => ({ + a: 100, +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 13, 23)) + + b: 200, +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 14, 19)) + + c: 300, +>c : Symbol(c, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 15, 19)) + + }); + } + + valueOrGetter({ a: 100, b: 200 }, () => ({ +>valueOrGetter : Symbol(valueOrGetter, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 48)) +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 20, 19)) +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 20, 27)) + + a: 100, +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 20, 46)) + + b: 200, +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 21, 15)) + + c: 300, +>c : Symbol(c, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 22, 15)) + + })); + + valueOrGetter({ a: 100, b: 200, c: 300 }, () => ({ +>valueOrGetter : Symbol(valueOrGetter, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 48)) +>SomeObj1 : Symbol(SomeObj1, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 0)) +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 26, 29)) +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 26, 37)) +>c : Symbol(c, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 26, 45)) + + a: 100, +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 26, 64)) + + b: 200, +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 27, 15)) + + })); + + valueOrGetter({ a: 100, b: 200 }, () => ({ +>valueOrGetter : Symbol(valueOrGetter, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 48)) +>SomeObj1 : Symbol(SomeObj1, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 0)) +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 31, 29)) +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 31, 37)) + + a: 100, +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 31, 56)) + + b: 200, +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 32, 15)) + + c: 300, +>c : Symbol(c, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 33, 15)) + + })); + + valueOrGetter({ a: 100, b: 200, c: 300 }, () => ({ +>valueOrGetter : Symbol(valueOrGetter, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 48)) +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 37, 19)) +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 37, 27)) +>c : Symbol(c, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 37, 35)) + + a: 100, +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 37, 54)) + + b: 200, +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 38, 15)) + + })); +} + +namespace funcExprs { +>funcExprs : Symbol(funcExprs, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 41, 1)) + + declare function consumeObj1(f: () => SomeObj1): void; +>consumeObj1 : Symbol(consumeObj1, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 43, 21)) +>f : Symbol(f, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 44, 33)) +>SomeObj1 : Symbol(SomeObj1, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 0)) + + consumeObj1(function() { +>consumeObj1 : Symbol(consumeObj1, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 43, 21)) + + return { + a: 100, +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 46, 16)) + + b: 200, +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 47, 19)) + + c: 300, +>c : Symbol(c, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 48, 19)) + + }; + }); + + function obj1FactoryFactory(): () => SomeObj1 { +>obj1FactoryFactory : Symbol(obj1FactoryFactory, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 51, 7)) +>SomeObj1 : Symbol(SomeObj1, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 0)) + + return function() { + return { + a: 100, +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 55, 20)) + + b: 200, +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 56, 23)) + + c: 300, +>c : Symbol(c, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 57, 23)) + } + }; + } + + valueOrGetter({ a: 100, b: 200 }, function() { +>valueOrGetter : Symbol(valueOrGetter, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 48)) +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 63, 19)) +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 63, 27)) + + return { + a: 100, +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 64, 16)) + + b: 200, +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 65, 19)) + + c: 300, +>c : Symbol(c, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 66, 19)) + + }; + }); + + valueOrGetter({ a: 100, b: 200, c: 300 }, function() { +>valueOrGetter : Symbol(valueOrGetter, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 48)) +>SomeObj1 : Symbol(SomeObj1, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 0)) +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 71, 29)) +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 71, 37)) +>c : Symbol(c, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 71, 45)) + + return { + a: 100, +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 72, 16)) + + b: 200, +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 73, 19)) + + c: 300, +>c : Symbol(c, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 74, 19)) + + }; + }); + + valueOrGetter({ a: 100, b: 200 }, function() { +>valueOrGetter : Symbol(valueOrGetter, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 48)) +>SomeObj1 : Symbol(SomeObj1, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 0)) +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 79, 29)) +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 79, 37)) + + return { + a: 100, +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 80, 16)) + + b: 200, +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 81, 19)) + + c: 300, +>c : Symbol(c, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 82, 19)) + + }; + }); + + valueOrGetter({ a: 100, b: 200, c: 300 }, function() { +>valueOrGetter : Symbol(valueOrGetter, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 0, 48)) +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 87, 19)) +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 87, 27)) +>c : Symbol(c, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 87, 35)) + + return { + a: 100, +>a : Symbol(a, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 88, 16)) + + b: 200, +>b : Symbol(b, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 89, 19)) + + c: 300, +>c : Symbol(c, Decl(excessPropertyErrorForFunctionExpressionReturns.ts, 90, 19)) + + }; + }); +} diff --git a/tests/baselines/reference/excessPropertyErrorForFunctionExpressionReturns.types b/tests/baselines/reference/excessPropertyErrorForFunctionExpressionReturns.types new file mode 100644 index 00000000000..379bb4dd44f --- /dev/null +++ b/tests/baselines/reference/excessPropertyErrorForFunctionExpressionReturns.types @@ -0,0 +1,333 @@ +=== tests/cases/compiler/excessPropertyErrorForFunctionExpressionReturns.ts === +export type SomeObj1 = { a: number, b: number }; +>SomeObj1 : SomeObj1 +>a : number +>b : number + +declare function valueOrGetter(x: T, f: () => T): T; +>valueOrGetter : (x: T, f: () => T) => T +>x : T +>f : () => T + +namespace arrows { +>arrows : typeof arrows + + declare function consumeObj1(f: () => SomeObj1): void; +>consumeObj1 : (f: () => SomeObj1) => void +>f : () => SomeObj1 + + consumeObj1(() => ({ +>consumeObj1(() => ({ a: 100, b: 200, c: 300, })) : void +>consumeObj1 : (f: () => SomeObj1) => void +>() => ({ a: 100, b: 200, c: 300, }) : () => { a: number; b: number; c: number; } +>({ a: 100, b: 200, c: 300, }) : { a: number; b: number; c: number; } +>{ a: 100, b: 200, c: 300, } : { a: number; b: number; c: number; } + + a: 100, +>a : number +>100 : 100 + + b: 200, +>b : number +>200 : 200 + + c: 300, +>c : number +>300 : 300 + + })); + + function obj1FactoryFactory(): () => SomeObj1 { +>obj1FactoryFactory : () => () => SomeObj1 + + return () => ({ +>() => ({ a: 100, b: 200, c: 300, }) : () => { a: number; b: number; c: number; } +>({ a: 100, b: 200, c: 300, }) : { a: number; b: number; c: number; } +>{ a: 100, b: 200, c: 300, } : { a: number; b: number; c: number; } + + a: 100, +>a : number +>100 : 100 + + b: 200, +>b : number +>200 : 200 + + c: 300, +>c : number +>300 : 300 + + }); + } + + valueOrGetter({ a: 100, b: 200 }, () => ({ +>valueOrGetter({ a: 100, b: 200 }, () => ({ a: 100, b: 200, c: 300, })) : { a: number; b: number; c: number; } +>valueOrGetter : (x: T, f: () => T) => T +>{ a: 100, b: 200 } : { a: number; b: number; } +>a : number +>100 : 100 +>b : number +>200 : 200 +>() => ({ a: 100, b: 200, c: 300, }) : () => { a: number; b: number; c: number; } +>({ a: 100, b: 200, c: 300, }) : { a: number; b: number; c: number; } +>{ a: 100, b: 200, c: 300, } : { a: number; b: number; c: number; } + + a: 100, +>a : number +>100 : 100 + + b: 200, +>b : number +>200 : 200 + + c: 300, +>c : number +>300 : 300 + + })); + + valueOrGetter({ a: 100, b: 200, c: 300 }, () => ({ +>valueOrGetter({ a: 100, b: 200, c: 300 }, () => ({ a: 100, b: 200, })) : SomeObj1 +>valueOrGetter : (x: T, f: () => T) => T +>{ a: 100, b: 200, c: 300 } : { a: number; b: number; c: number; } +>a : number +>100 : 100 +>b : number +>200 : 200 +>c : number +>300 : 300 +>() => ({ a: 100, b: 200, }) : () => { a: number; b: number; } +>({ a: 100, b: 200, }) : { a: number; b: number; } +>{ a: 100, b: 200, } : { a: number; b: number; } + + a: 100, +>a : number +>100 : 100 + + b: 200, +>b : number +>200 : 200 + + })); + + valueOrGetter({ a: 100, b: 200 }, () => ({ +>valueOrGetter({ a: 100, b: 200 }, () => ({ a: 100, b: 200, c: 300, })) : SomeObj1 +>valueOrGetter : (x: T, f: () => T) => T +>{ a: 100, b: 200 } : { a: number; b: number; } +>a : number +>100 : 100 +>b : number +>200 : 200 +>() => ({ a: 100, b: 200, c: 300, }) : () => { a: number; b: number; c: number; } +>({ a: 100, b: 200, c: 300, }) : { a: number; b: number; c: number; } +>{ a: 100, b: 200, c: 300, } : { a: number; b: number; c: number; } + + a: 100, +>a : number +>100 : 100 + + b: 200, +>b : number +>200 : 200 + + c: 300, +>c : number +>300 : 300 + + })); + + valueOrGetter({ a: 100, b: 200, c: 300 }, () => ({ +>valueOrGetter({ a: 100, b: 200, c: 300 }, () => ({ a: 100, b: 200, })) : { a: number; b: number; } +>valueOrGetter : (x: T, f: () => T) => T +>{ a: 100, b: 200, c: 300 } : { a: number; b: number; c: number; } +>a : number +>100 : 100 +>b : number +>200 : 200 +>c : number +>300 : 300 +>() => ({ a: 100, b: 200, }) : () => { a: number; b: number; } +>({ a: 100, b: 200, }) : { a: number; b: number; } +>{ a: 100, b: 200, } : { a: number; b: number; } + + a: 100, +>a : number +>100 : 100 + + b: 200, +>b : number +>200 : 200 + + })); +} + +namespace funcExprs { +>funcExprs : typeof funcExprs + + declare function consumeObj1(f: () => SomeObj1): void; +>consumeObj1 : (f: () => SomeObj1) => void +>f : () => SomeObj1 + + consumeObj1(function() { +>consumeObj1(function() { return { a: 100, b: 200, c: 300, }; }) : void +>consumeObj1 : (f: () => SomeObj1) => void +>function() { return { a: 100, b: 200, c: 300, }; } : () => { a: number; b: number; c: number; } + + return { +>{ a: 100, b: 200, c: 300, } : { a: number; b: number; c: number; } + + a: 100, +>a : number +>100 : 100 + + b: 200, +>b : number +>200 : 200 + + c: 300, +>c : number +>300 : 300 + + }; + }); + + function obj1FactoryFactory(): () => SomeObj1 { +>obj1FactoryFactory : () => () => SomeObj1 + + return function() { +>function() { return { a: 100, b: 200, c: 300, } } : () => { a: number; b: number; c: number; } + + return { +>{ a: 100, b: 200, c: 300, } : { a: number; b: number; c: number; } + + a: 100, +>a : number +>100 : 100 + + b: 200, +>b : number +>200 : 200 + + c: 300, +>c : number +>300 : 300 + } + }; + } + + valueOrGetter({ a: 100, b: 200 }, function() { +>valueOrGetter({ a: 100, b: 200 }, function() { return { a: 100, b: 200, c: 300, }; }) : { a: number; b: number; } +>valueOrGetter : (x: T, f: () => T) => T +>{ a: 100, b: 200 } : { a: number; b: number; } +>a : number +>100 : 100 +>b : number +>200 : 200 +>function() { return { a: 100, b: 200, c: 300, }; } : () => { a: number; b: number; c: number; } + + return { +>{ a: 100, b: 200, c: 300, } : { a: number; b: number; c: number; } + + a: 100, +>a : number +>100 : 100 + + b: 200, +>b : number +>200 : 200 + + c: 300, +>c : number +>300 : 300 + + }; + }); + + valueOrGetter({ a: 100, b: 200, c: 300 }, function() { +>valueOrGetter({ a: 100, b: 200, c: 300 }, function() { return { a: 100, b: 200, c: 300, }; }) : SomeObj1 +>valueOrGetter : (x: T, f: () => T) => T +>{ a: 100, b: 200, c: 300 } : { a: number; b: number; c: number; } +>a : number +>100 : 100 +>b : number +>200 : 200 +>c : number +>300 : 300 +>function() { return { a: 100, b: 200, c: 300, }; } : () => { a: number; b: number; c: number; } + + return { +>{ a: 100, b: 200, c: 300, } : { a: number; b: number; c: number; } + + a: 100, +>a : number +>100 : 100 + + b: 200, +>b : number +>200 : 200 + + c: 300, +>c : number +>300 : 300 + + }; + }); + + valueOrGetter({ a: 100, b: 200 }, function() { +>valueOrGetter({ a: 100, b: 200 }, function() { return { a: 100, b: 200, c: 300, }; }) : SomeObj1 +>valueOrGetter : (x: T, f: () => T) => T +>{ a: 100, b: 200 } : { a: number; b: number; } +>a : number +>100 : 100 +>b : number +>200 : 200 +>function() { return { a: 100, b: 200, c: 300, }; } : () => { a: number; b: number; c: number; } + + return { +>{ a: 100, b: 200, c: 300, } : { a: number; b: number; c: number; } + + a: 100, +>a : number +>100 : 100 + + b: 200, +>b : number +>200 : 200 + + c: 300, +>c : number +>300 : 300 + + }; + }); + + valueOrGetter({ a: 100, b: 200, c: 300 }, function() { +>valueOrGetter({ a: 100, b: 200, c: 300 }, function() { return { a: 100, b: 200, c: 300, }; }) : { a: number; b: number; c: number; } +>valueOrGetter : (x: T, f: () => T) => T +>{ a: 100, b: 200, c: 300 } : { a: number; b: number; c: number; } +>a : number +>100 : 100 +>b : number +>200 : 200 +>c : number +>300 : 300 +>function() { return { a: 100, b: 200, c: 300, }; } : () => { a: number; b: number; c: number; } + + return { +>{ a: 100, b: 200, c: 300, } : { a: number; b: number; c: number; } + + a: 100, +>a : number +>100 : 100 + + b: 200, +>b : number +>200 : 200 + + c: 300, +>c : number +>300 : 300 + + }; + }); +}