diff --git a/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.errors.txt b/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.errors.txt new file mode 100644 index 00000000000..9a0d64c1a56 --- /dev/null +++ b/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.errors.txt @@ -0,0 +1,177 @@ +tests/cases/compiler/inferFromGenericFunctionReturnTypes3.ts(28,30): error TS2345: Argument of type 'string' is not assignable to parameter of type '"bar"'. + + +==== tests/cases/compiler/inferFromGenericFunctionReturnTypes3.ts (1 errors) ==== + // Repros from #5487 + + function truePromise(): Promise { + return Promise.resolve(true); + } + + interface Wrap { + value: T; + } + + function wrap(value: T): Wrap { + return { value }; + } + + function wrappedFoo(): Wrap<'foo'> { + return wrap('foo'); + } + + function wrapBar(value: 'bar'): Wrap<'bar'> { + return { value }; + } + + function wrappedBar(): Wrap<'bar'> { + const value = 'bar'; + const inferred = wrapBar(value); + const literal = wrapBar('bar'); + const value2: string = 'bar'; + const literal2 = wrapBar(value2); // Error + ~~~~~~ +!!! error TS2345: Argument of type 'string' is not assignable to parameter of type '"bar"'. + return wrap(value); + } + + function wrappedBaz(): Wrap<'baz'> { + const value: 'baz' = 'baz'; + return wrap(value); + } + + // Repro from #11152 + + interface FolderContentItem { + type: 'folder' | 'file'; + } + + let a: FolderContentItem[] = []; + a = [1, 2, 3, 4, 5].map(v => ({ type: 'folder' })); + + // Repro from #11312 + + let arr: Array<[number, number]> = [[1, 2]] + + let mappedArr: Array<[number, number]> = arr.map(([x, y]) => { + return [x, y]; + }) + + // Repro from #13594 + + export namespace DiagnosticSeverity { + export const Error = 1; + export const Warning = 2; + export const Information = 3; + export const Hint = 4; + } + + export type DiagnosticSeverity = 1 | 2 | 3 | 4; + + export interface Diagnostic { + severity?: DiagnosticSeverity; + code?: number | string; + source?: string; + message: string; + } + + function bug(): Diagnostic[] { + let values: any[] = []; + return values.map((value) => { + return { + severity: DiagnosticSeverity.Error, + message: 'message' + } + }); + } + + // Repro from #22870 + + function objectToMap(obj: any) { + return new Map(Object.keys(obj).map(key => [key, obj[key]])); + }; + + // Repro from #24352 + + interface Person { + phoneNumbers: { + __typename: 'PhoneNumber'; + }[]; + } + + function createPerson(): Person { + return { + phoneNumbers: [1].map(() => ({ + __typename: 'PhoneNumber' + })) + }; + } + + // Repro from #26621 + + type Box = { value: T }; + declare function box(value: T): Box; + + type WinCondition = + | { type: 'win', player: string } + | { type: 'draw' }; + + let zz: Box = box({ type: 'draw' }); + + type WinType = 'win' | 'draw'; + + let yy: Box = box('draw'); + + // Repro from #27074 + + interface OK { + kind: "OK"; + value: T; + } + export function ok(value: T): OK { + return { + kind: "OK", + value: value + }; + } + + let result: OK<[string, number]> = ok(["hello", 12]); + + // Repro from #25889 + + interface I { + code: 'mapped', + name: string, + } + + const a3: I[] = ['a', 'b'].map(name => { + return { + code: 'mapped', + name, + } + }); + + // Repro from https://www.memsql.com/blog/porting-30k-lines-of-code-from-flow-to-typescript/ + + type Player = { + name: string; + age: number; + position: "STRIKER" | "GOALKEEPER", + }; + + type F = () => Promise>; + + const f1: F = () => { + return Promise.all([ + { + name: "David Gomes", + age: 23, + position: "GOALKEEPER", + }, { + name: "Cristiano Ronaldo", + age: 33, + position: "STRIKER", + } + ]); + }; + \ No newline at end of file diff --git a/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.js b/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.js new file mode 100644 index 00000000000..ca1533bbab1 --- /dev/null +++ b/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.js @@ -0,0 +1,285 @@ +//// [inferFromGenericFunctionReturnTypes3.ts] +// Repros from #5487 + +function truePromise(): Promise { + return Promise.resolve(true); +} + +interface Wrap { + value: T; +} + +function wrap(value: T): Wrap { + return { value }; +} + +function wrappedFoo(): Wrap<'foo'> { + return wrap('foo'); +} + +function wrapBar(value: 'bar'): Wrap<'bar'> { + return { value }; +} + +function wrappedBar(): Wrap<'bar'> { + const value = 'bar'; + const inferred = wrapBar(value); + const literal = wrapBar('bar'); + const value2: string = 'bar'; + const literal2 = wrapBar(value2); // Error + return wrap(value); +} + +function wrappedBaz(): Wrap<'baz'> { + const value: 'baz' = 'baz'; + return wrap(value); +} + +// Repro from #11152 + +interface FolderContentItem { + type: 'folder' | 'file'; +} + +let a: FolderContentItem[] = []; +a = [1, 2, 3, 4, 5].map(v => ({ type: 'folder' })); + +// Repro from #11312 + +let arr: Array<[number, number]> = [[1, 2]] + +let mappedArr: Array<[number, number]> = arr.map(([x, y]) => { + return [x, y]; +}) + +// Repro from #13594 + +export namespace DiagnosticSeverity { + export const Error = 1; + export const Warning = 2; + export const Information = 3; + export const Hint = 4; +} + +export type DiagnosticSeverity = 1 | 2 | 3 | 4; + +export interface Diagnostic { + severity?: DiagnosticSeverity; + code?: number | string; + source?: string; + message: string; +} + +function bug(): Diagnostic[] { + let values: any[] = []; + return values.map((value) => { + return { + severity: DiagnosticSeverity.Error, + message: 'message' + } + }); +} + +// Repro from #22870 + +function objectToMap(obj: any) { + return new Map(Object.keys(obj).map(key => [key, obj[key]])); +}; + +// Repro from #24352 + +interface Person { + phoneNumbers: { + __typename: 'PhoneNumber'; + }[]; +} + +function createPerson(): Person { + return { + phoneNumbers: [1].map(() => ({ + __typename: 'PhoneNumber' + })) + }; +} + +// Repro from #26621 + +type Box = { value: T }; +declare function box(value: T): Box; + +type WinCondition = + | { type: 'win', player: string } + | { type: 'draw' }; + +let zz: Box = box({ type: 'draw' }); + +type WinType = 'win' | 'draw'; + +let yy: Box = box('draw'); + +// Repro from #27074 + +interface OK { + kind: "OK"; + value: T; +} +export function ok(value: T): OK { + return { + kind: "OK", + value: value + }; +} + +let result: OK<[string, number]> = ok(["hello", 12]); + +// Repro from #25889 + +interface I { + code: 'mapped', + name: string, +} + +const a3: I[] = ['a', 'b'].map(name => { + return { + code: 'mapped', + name, + } +}); + +// Repro from https://www.memsql.com/blog/porting-30k-lines-of-code-from-flow-to-typescript/ + +type Player = { + name: string; + age: number; + position: "STRIKER" | "GOALKEEPER", +}; + +type F = () => Promise>; + +const f1: F = () => { + return Promise.all([ + { + name: "David Gomes", + age: 23, + position: "GOALKEEPER", + }, { + name: "Cristiano Ronaldo", + age: 33, + position: "STRIKER", + } + ]); +}; + + +//// [inferFromGenericFunctionReturnTypes3.js] +// Repros from #5487 +function truePromise() { + return Promise.resolve(true); +} +function wrap(value) { + return { value }; +} +function wrappedFoo() { + return wrap('foo'); +} +function wrapBar(value) { + return { value }; +} +function wrappedBar() { + const value = 'bar'; + const inferred = wrapBar(value); + const literal = wrapBar('bar'); + const value2 = 'bar'; + const literal2 = wrapBar(value2); // Error + return wrap(value); +} +function wrappedBaz() { + const value = 'baz'; + return wrap(value); +} +let a = []; +a = [1, 2, 3, 4, 5].map(v => ({ type: 'folder' })); +// Repro from #11312 +let arr = [[1, 2]]; +let mappedArr = arr.map(([x, y]) => { + return [x, y]; +}); +// Repro from #13594 +export var DiagnosticSeverity; +(function (DiagnosticSeverity) { + DiagnosticSeverity.Error = 1; + DiagnosticSeverity.Warning = 2; + DiagnosticSeverity.Information = 3; + DiagnosticSeverity.Hint = 4; +})(DiagnosticSeverity || (DiagnosticSeverity = {})); +function bug() { + let values = []; + return values.map((value) => { + return { + severity: DiagnosticSeverity.Error, + message: 'message' + }; + }); +} +// Repro from #22870 +function objectToMap(obj) { + return new Map(Object.keys(obj).map(key => [key, obj[key]])); +} +; +function createPerson() { + return { + phoneNumbers: [1].map(() => ({ + __typename: 'PhoneNumber' + })) + }; +} +let zz = box({ type: 'draw' }); +let yy = box('draw'); +export function ok(value) { + return { + kind: "OK", + value: value + }; +} +let result = ok(["hello", 12]); +const a3 = ['a', 'b'].map(name => { + return { + code: 'mapped', + name, + }; +}); +const f1 = () => { + return Promise.all([ + { + name: "David Gomes", + age: 23, + position: "GOALKEEPER", + }, { + name: "Cristiano Ronaldo", + age: 33, + position: "STRIKER", + } + ]); +}; + + +//// [inferFromGenericFunctionReturnTypes3.d.ts] +export declare namespace DiagnosticSeverity { + const Error = 1; + const Warning = 2; + const Information = 3; + const Hint = 4; +} +export declare type DiagnosticSeverity = 1 | 2 | 3 | 4; +export interface Diagnostic { + severity?: DiagnosticSeverity; + code?: number | string; + source?: string; + message: string; +} +interface OK { + kind: "OK"; + value: T; +} +export declare function ok(value: T): OK; +export {}; diff --git a/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.symbols b/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.symbols new file mode 100644 index 00000000000..16beb0546de --- /dev/null +++ b/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.symbols @@ -0,0 +1,409 @@ +=== tests/cases/compiler/inferFromGenericFunctionReturnTypes3.ts === +// Repros from #5487 + +function truePromise(): Promise { +>truePromise : Symbol(truePromise, Decl(inferFromGenericFunctionReturnTypes3.ts, 0, 0)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) + + return Promise.resolve(true); +>Promise.resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +} + +interface Wrap { +>Wrap : Symbol(Wrap, Decl(inferFromGenericFunctionReturnTypes3.ts, 4, 1)) +>T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 6, 15)) + + value: T; +>value : Symbol(Wrap.value, Decl(inferFromGenericFunctionReturnTypes3.ts, 6, 19)) +>T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 6, 15)) +} + +function wrap(value: T): Wrap { +>wrap : Symbol(wrap, Decl(inferFromGenericFunctionReturnTypes3.ts, 8, 1)) +>T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 10, 14)) +>value : Symbol(value, Decl(inferFromGenericFunctionReturnTypes3.ts, 10, 17)) +>T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 10, 14)) +>Wrap : Symbol(Wrap, Decl(inferFromGenericFunctionReturnTypes3.ts, 4, 1)) +>T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 10, 14)) + + return { value }; +>value : Symbol(value, Decl(inferFromGenericFunctionReturnTypes3.ts, 11, 12)) +} + +function wrappedFoo(): Wrap<'foo'> { +>wrappedFoo : Symbol(wrappedFoo, Decl(inferFromGenericFunctionReturnTypes3.ts, 12, 1)) +>Wrap : Symbol(Wrap, Decl(inferFromGenericFunctionReturnTypes3.ts, 4, 1)) + + return wrap('foo'); +>wrap : Symbol(wrap, Decl(inferFromGenericFunctionReturnTypes3.ts, 8, 1)) +} + +function wrapBar(value: 'bar'): Wrap<'bar'> { +>wrapBar : Symbol(wrapBar, Decl(inferFromGenericFunctionReturnTypes3.ts, 16, 1)) +>value : Symbol(value, Decl(inferFromGenericFunctionReturnTypes3.ts, 18, 17)) +>Wrap : Symbol(Wrap, Decl(inferFromGenericFunctionReturnTypes3.ts, 4, 1)) + + return { value }; +>value : Symbol(value, Decl(inferFromGenericFunctionReturnTypes3.ts, 19, 12)) +} + +function wrappedBar(): Wrap<'bar'> { +>wrappedBar : Symbol(wrappedBar, Decl(inferFromGenericFunctionReturnTypes3.ts, 20, 1)) +>Wrap : Symbol(Wrap, Decl(inferFromGenericFunctionReturnTypes3.ts, 4, 1)) + + const value = 'bar'; +>value : Symbol(value, Decl(inferFromGenericFunctionReturnTypes3.ts, 23, 9)) + + const inferred = wrapBar(value); +>inferred : Symbol(inferred, Decl(inferFromGenericFunctionReturnTypes3.ts, 24, 9)) +>wrapBar : Symbol(wrapBar, Decl(inferFromGenericFunctionReturnTypes3.ts, 16, 1)) +>value : Symbol(value, Decl(inferFromGenericFunctionReturnTypes3.ts, 23, 9)) + + const literal = wrapBar('bar'); +>literal : Symbol(literal, Decl(inferFromGenericFunctionReturnTypes3.ts, 25, 9)) +>wrapBar : Symbol(wrapBar, Decl(inferFromGenericFunctionReturnTypes3.ts, 16, 1)) + + const value2: string = 'bar'; +>value2 : Symbol(value2, Decl(inferFromGenericFunctionReturnTypes3.ts, 26, 9)) + + const literal2 = wrapBar(value2); // Error +>literal2 : Symbol(literal2, Decl(inferFromGenericFunctionReturnTypes3.ts, 27, 9)) +>wrapBar : Symbol(wrapBar, Decl(inferFromGenericFunctionReturnTypes3.ts, 16, 1)) +>value2 : Symbol(value2, Decl(inferFromGenericFunctionReturnTypes3.ts, 26, 9)) + + return wrap(value); +>wrap : Symbol(wrap, Decl(inferFromGenericFunctionReturnTypes3.ts, 8, 1)) +>value : Symbol(value, Decl(inferFromGenericFunctionReturnTypes3.ts, 23, 9)) +} + +function wrappedBaz(): Wrap<'baz'> { +>wrappedBaz : Symbol(wrappedBaz, Decl(inferFromGenericFunctionReturnTypes3.ts, 29, 1)) +>Wrap : Symbol(Wrap, Decl(inferFromGenericFunctionReturnTypes3.ts, 4, 1)) + + const value: 'baz' = 'baz'; +>value : Symbol(value, Decl(inferFromGenericFunctionReturnTypes3.ts, 32, 9)) + + return wrap(value); +>wrap : Symbol(wrap, Decl(inferFromGenericFunctionReturnTypes3.ts, 8, 1)) +>value : Symbol(value, Decl(inferFromGenericFunctionReturnTypes3.ts, 32, 9)) +} + +// Repro from #11152 + +interface FolderContentItem { +>FolderContentItem : Symbol(FolderContentItem, Decl(inferFromGenericFunctionReturnTypes3.ts, 34, 1)) + + type: 'folder' | 'file'; +>type : Symbol(FolderContentItem.type, Decl(inferFromGenericFunctionReturnTypes3.ts, 38, 29)) +} + +let a: FolderContentItem[] = []; +>a : Symbol(a, Decl(inferFromGenericFunctionReturnTypes3.ts, 42, 3)) +>FolderContentItem : Symbol(FolderContentItem, Decl(inferFromGenericFunctionReturnTypes3.ts, 34, 1)) + +a = [1, 2, 3, 4, 5].map(v => ({ type: 'folder' })); +>a : Symbol(a, Decl(inferFromGenericFunctionReturnTypes3.ts, 42, 3)) +>[1, 2, 3, 4, 5].map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>v : Symbol(v, Decl(inferFromGenericFunctionReturnTypes3.ts, 43, 24)) +>type : Symbol(type, Decl(inferFromGenericFunctionReturnTypes3.ts, 43, 31)) + +// Repro from #11312 + +let arr: Array<[number, number]> = [[1, 2]] +>arr : Symbol(arr, Decl(inferFromGenericFunctionReturnTypes3.ts, 47, 3)) +>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) + +let mappedArr: Array<[number, number]> = arr.map(([x, y]) => { +>mappedArr : Symbol(mappedArr, Decl(inferFromGenericFunctionReturnTypes3.ts, 49, 3)) +>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>arr.map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>arr : Symbol(arr, Decl(inferFromGenericFunctionReturnTypes3.ts, 47, 3)) +>map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>x : Symbol(x, Decl(inferFromGenericFunctionReturnTypes3.ts, 49, 51)) +>y : Symbol(y, Decl(inferFromGenericFunctionReturnTypes3.ts, 49, 53)) + + return [x, y]; +>x : Symbol(x, Decl(inferFromGenericFunctionReturnTypes3.ts, 49, 51)) +>y : Symbol(y, Decl(inferFromGenericFunctionReturnTypes3.ts, 49, 53)) + +}) + +// Repro from #13594 + +export namespace DiagnosticSeverity { +>DiagnosticSeverity : Symbol(DiagnosticSeverity, Decl(inferFromGenericFunctionReturnTypes3.ts, 51, 2), Decl(inferFromGenericFunctionReturnTypes3.ts, 60, 1)) + + export const Error = 1; +>Error : Symbol(Error, Decl(inferFromGenericFunctionReturnTypes3.ts, 56, 13)) + + export const Warning = 2; +>Warning : Symbol(Warning, Decl(inferFromGenericFunctionReturnTypes3.ts, 57, 13)) + + export const Information = 3; +>Information : Symbol(Information, Decl(inferFromGenericFunctionReturnTypes3.ts, 58, 13)) + + export const Hint = 4; +>Hint : Symbol(Hint, Decl(inferFromGenericFunctionReturnTypes3.ts, 59, 13)) +} + +export type DiagnosticSeverity = 1 | 2 | 3 | 4; +>DiagnosticSeverity : Symbol(DiagnosticSeverity, Decl(inferFromGenericFunctionReturnTypes3.ts, 51, 2), Decl(inferFromGenericFunctionReturnTypes3.ts, 60, 1)) + +export interface Diagnostic { +>Diagnostic : Symbol(Diagnostic, Decl(inferFromGenericFunctionReturnTypes3.ts, 62, 47)) + + severity?: DiagnosticSeverity; +>severity : Symbol(Diagnostic.severity, Decl(inferFromGenericFunctionReturnTypes3.ts, 64, 29)) +>DiagnosticSeverity : Symbol(DiagnosticSeverity, Decl(inferFromGenericFunctionReturnTypes3.ts, 51, 2), Decl(inferFromGenericFunctionReturnTypes3.ts, 60, 1)) + + code?: number | string; +>code : Symbol(Diagnostic.code, Decl(inferFromGenericFunctionReturnTypes3.ts, 65, 31)) + + source?: string; +>source : Symbol(Diagnostic.source, Decl(inferFromGenericFunctionReturnTypes3.ts, 66, 24)) + + message: string; +>message : Symbol(Diagnostic.message, Decl(inferFromGenericFunctionReturnTypes3.ts, 67, 17)) +} + +function bug(): Diagnostic[] { +>bug : Symbol(bug, Decl(inferFromGenericFunctionReturnTypes3.ts, 69, 1)) +>Diagnostic : Symbol(Diagnostic, Decl(inferFromGenericFunctionReturnTypes3.ts, 62, 47)) + + let values: any[] = []; +>values : Symbol(values, Decl(inferFromGenericFunctionReturnTypes3.ts, 72, 4)) + + return values.map((value) => { +>values.map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>values : Symbol(values, Decl(inferFromGenericFunctionReturnTypes3.ts, 72, 4)) +>map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>value : Symbol(value, Decl(inferFromGenericFunctionReturnTypes3.ts, 73, 20)) + + return { + severity: DiagnosticSeverity.Error, +>severity : Symbol(severity, Decl(inferFromGenericFunctionReturnTypes3.ts, 74, 10)) +>DiagnosticSeverity.Error : Symbol(DiagnosticSeverity.Error, Decl(inferFromGenericFunctionReturnTypes3.ts, 56, 13)) +>DiagnosticSeverity : Symbol(DiagnosticSeverity, Decl(inferFromGenericFunctionReturnTypes3.ts, 51, 2), Decl(inferFromGenericFunctionReturnTypes3.ts, 60, 1)) +>Error : Symbol(DiagnosticSeverity.Error, Decl(inferFromGenericFunctionReturnTypes3.ts, 56, 13)) + + message: 'message' +>message : Symbol(message, Decl(inferFromGenericFunctionReturnTypes3.ts, 75, 38)) + } + }); +} + +// Repro from #22870 + +function objectToMap(obj: any) { +>objectToMap : Symbol(objectToMap, Decl(inferFromGenericFunctionReturnTypes3.ts, 79, 1)) +>obj : Symbol(obj, Decl(inferFromGenericFunctionReturnTypes3.ts, 83, 21)) + + return new Map(Object.keys(obj).map(key => [key, obj[key]])); +>Map : Symbol(Map, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>Object.keys(obj).map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>Object.keys : Symbol(ObjectConstructor.keys, Decl(lib.es5.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>keys : Symbol(ObjectConstructor.keys, Decl(lib.es5.d.ts, --, --)) +>obj : Symbol(obj, Decl(inferFromGenericFunctionReturnTypes3.ts, 83, 21)) +>map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>key : Symbol(key, Decl(inferFromGenericFunctionReturnTypes3.ts, 84, 37)) +>key : Symbol(key, Decl(inferFromGenericFunctionReturnTypes3.ts, 84, 37)) +>obj : Symbol(obj, Decl(inferFromGenericFunctionReturnTypes3.ts, 83, 21)) +>key : Symbol(key, Decl(inferFromGenericFunctionReturnTypes3.ts, 84, 37)) + +}; + +// Repro from #24352 + +interface Person { +>Person : Symbol(Person, Decl(inferFromGenericFunctionReturnTypes3.ts, 85, 2)) + + phoneNumbers: { +>phoneNumbers : Symbol(Person.phoneNumbers, Decl(inferFromGenericFunctionReturnTypes3.ts, 89, 18)) + + __typename: 'PhoneNumber'; +>__typename : Symbol(__typename, Decl(inferFromGenericFunctionReturnTypes3.ts, 90, 17)) + + }[]; +} + +function createPerson(): Person { +>createPerson : Symbol(createPerson, Decl(inferFromGenericFunctionReturnTypes3.ts, 93, 1)) +>Person : Symbol(Person, Decl(inferFromGenericFunctionReturnTypes3.ts, 85, 2)) + + return { + phoneNumbers: [1].map(() => ({ +>phoneNumbers : Symbol(phoneNumbers, Decl(inferFromGenericFunctionReturnTypes3.ts, 96, 10)) +>[1].map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) + + __typename: 'PhoneNumber' +>__typename : Symbol(__typename, Decl(inferFromGenericFunctionReturnTypes3.ts, 97, 34)) + + })) + }; +} + +// Repro from #26621 + +type Box = { value: T }; +>Box : Symbol(Box, Decl(inferFromGenericFunctionReturnTypes3.ts, 101, 1)) +>T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 105, 9)) +>value : Symbol(value, Decl(inferFromGenericFunctionReturnTypes3.ts, 105, 15)) +>T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 105, 9)) + +declare function box(value: T): Box; +>box : Symbol(box, Decl(inferFromGenericFunctionReturnTypes3.ts, 105, 27)) +>T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 106, 21)) +>value : Symbol(value, Decl(inferFromGenericFunctionReturnTypes3.ts, 106, 24)) +>T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 106, 21)) +>Box : Symbol(Box, Decl(inferFromGenericFunctionReturnTypes3.ts, 101, 1)) +>T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 106, 21)) + +type WinCondition = +>WinCondition : Symbol(WinCondition, Decl(inferFromGenericFunctionReturnTypes3.ts, 106, 42)) + + | { type: 'win', player: string } +>type : Symbol(type, Decl(inferFromGenericFunctionReturnTypes3.ts, 109, 7)) +>player : Symbol(player, Decl(inferFromGenericFunctionReturnTypes3.ts, 109, 20)) + + | { type: 'draw' }; +>type : Symbol(type, Decl(inferFromGenericFunctionReturnTypes3.ts, 110, 7)) + +let zz: Box = box({ type: 'draw' }); +>zz : Symbol(zz, Decl(inferFromGenericFunctionReturnTypes3.ts, 112, 3)) +>Box : Symbol(Box, Decl(inferFromGenericFunctionReturnTypes3.ts, 101, 1)) +>WinCondition : Symbol(WinCondition, Decl(inferFromGenericFunctionReturnTypes3.ts, 106, 42)) +>box : Symbol(box, Decl(inferFromGenericFunctionReturnTypes3.ts, 105, 27)) +>type : Symbol(type, Decl(inferFromGenericFunctionReturnTypes3.ts, 112, 33)) + +type WinType = 'win' | 'draw'; +>WinType : Symbol(WinType, Decl(inferFromGenericFunctionReturnTypes3.ts, 112, 50)) + +let yy: Box = box('draw'); +>yy : Symbol(yy, Decl(inferFromGenericFunctionReturnTypes3.ts, 116, 3)) +>Box : Symbol(Box, Decl(inferFromGenericFunctionReturnTypes3.ts, 101, 1)) +>WinType : Symbol(WinType, Decl(inferFromGenericFunctionReturnTypes3.ts, 112, 50)) +>box : Symbol(box, Decl(inferFromGenericFunctionReturnTypes3.ts, 105, 27)) + +// Repro from #27074 + +interface OK { +>OK : Symbol(OK, Decl(inferFromGenericFunctionReturnTypes3.ts, 116, 35)) +>T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 120, 13)) + + kind: "OK"; +>kind : Symbol(OK.kind, Decl(inferFromGenericFunctionReturnTypes3.ts, 120, 17)) + + value: T; +>value : Symbol(OK.value, Decl(inferFromGenericFunctionReturnTypes3.ts, 121, 15)) +>T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 120, 13)) +} +export function ok(value: T): OK { +>ok : Symbol(ok, Decl(inferFromGenericFunctionReturnTypes3.ts, 123, 1)) +>T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 124, 19)) +>value : Symbol(value, Decl(inferFromGenericFunctionReturnTypes3.ts, 124, 22)) +>T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 124, 19)) +>OK : Symbol(OK, Decl(inferFromGenericFunctionReturnTypes3.ts, 116, 35)) +>T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 124, 19)) + + return { + kind: "OK", +>kind : Symbol(kind, Decl(inferFromGenericFunctionReturnTypes3.ts, 125, 12)) + + value: value +>value : Symbol(value, Decl(inferFromGenericFunctionReturnTypes3.ts, 126, 19)) +>value : Symbol(value, Decl(inferFromGenericFunctionReturnTypes3.ts, 124, 22)) + + }; +} + +let result: OK<[string, number]> = ok(["hello", 12]); +>result : Symbol(result, Decl(inferFromGenericFunctionReturnTypes3.ts, 131, 3)) +>OK : Symbol(OK, Decl(inferFromGenericFunctionReturnTypes3.ts, 116, 35)) +>ok : Symbol(ok, Decl(inferFromGenericFunctionReturnTypes3.ts, 123, 1)) + +// Repro from #25889 + +interface I { +>I : Symbol(I, Decl(inferFromGenericFunctionReturnTypes3.ts, 131, 53)) + + code: 'mapped', +>code : Symbol(I.code, Decl(inferFromGenericFunctionReturnTypes3.ts, 135, 13)) + + name: string, +>name : Symbol(I.name, Decl(inferFromGenericFunctionReturnTypes3.ts, 136, 19)) +} + +const a3: I[] = ['a', 'b'].map(name => { +>a3 : Symbol(a3, Decl(inferFromGenericFunctionReturnTypes3.ts, 140, 5)) +>I : Symbol(I, Decl(inferFromGenericFunctionReturnTypes3.ts, 131, 53)) +>['a', 'b'].map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) +>name : Symbol(name, Decl(inferFromGenericFunctionReturnTypes3.ts, 140, 31)) + + return { + code: 'mapped', +>code : Symbol(code, Decl(inferFromGenericFunctionReturnTypes3.ts, 141, 12)) + + name, +>name : Symbol(name, Decl(inferFromGenericFunctionReturnTypes3.ts, 142, 23)) + } +}); + +// Repro from https://www.memsql.com/blog/porting-30k-lines-of-code-from-flow-to-typescript/ + +type Player = { +>Player : Symbol(Player, Decl(inferFromGenericFunctionReturnTypes3.ts, 145, 3)) + + name: string; +>name : Symbol(name, Decl(inferFromGenericFunctionReturnTypes3.ts, 149, 15)) + + age: number; +>age : Symbol(age, Decl(inferFromGenericFunctionReturnTypes3.ts, 150, 17)) + + position: "STRIKER" | "GOALKEEPER", +>position : Symbol(position, Decl(inferFromGenericFunctionReturnTypes3.ts, 151, 16)) + +}; + +type F = () => Promise>; +>F : Symbol(F, Decl(inferFromGenericFunctionReturnTypes3.ts, 153, 2)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>Player : Symbol(Player, Decl(inferFromGenericFunctionReturnTypes3.ts, 145, 3)) + +const f1: F = () => { +>f1 : Symbol(f1, Decl(inferFromGenericFunctionReturnTypes3.ts, 157, 5)) +>F : Symbol(F, Decl(inferFromGenericFunctionReturnTypes3.ts, 153, 2)) + + return Promise.all([ +>Promise.all : Symbol(PromiseConstructor.all, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --) ... and 6 more) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>all : Symbol(PromiseConstructor.all, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --) ... and 6 more) + { + name: "David Gomes", +>name : Symbol(name, Decl(inferFromGenericFunctionReturnTypes3.ts, 159, 9)) + + age: 23, +>age : Symbol(age, Decl(inferFromGenericFunctionReturnTypes3.ts, 160, 32)) + + position: "GOALKEEPER", +>position : Symbol(position, Decl(inferFromGenericFunctionReturnTypes3.ts, 161, 20)) + + }, { + name: "Cristiano Ronaldo", +>name : Symbol(name, Decl(inferFromGenericFunctionReturnTypes3.ts, 163, 12)) + + age: 33, +>age : Symbol(age, Decl(inferFromGenericFunctionReturnTypes3.ts, 164, 38)) + + position: "STRIKER", +>position : Symbol(position, Decl(inferFromGenericFunctionReturnTypes3.ts, 165, 20)) + } + ]); +}; + diff --git a/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.types b/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.types new file mode 100644 index 00000000000..e983cc64819 --- /dev/null +++ b/tests/baselines/reference/inferFromGenericFunctionReturnTypes3.types @@ -0,0 +1,452 @@ +=== tests/cases/compiler/inferFromGenericFunctionReturnTypes3.ts === +// Repros from #5487 + +function truePromise(): Promise { +>truePromise : () => Promise +>true : true + + return Promise.resolve(true); +>Promise.resolve(true) : Promise +>Promise.resolve : { (value: T | PromiseLike): Promise; (): Promise; } +>Promise : PromiseConstructor +>resolve : { (value: T | PromiseLike): Promise; (): Promise; } +>true : true +} + +interface Wrap { + value: T; +>value : T +} + +function wrap(value: T): Wrap { +>wrap : (value: T) => Wrap +>value : T + + return { value }; +>{ value } : { value: T; } +>value : T +} + +function wrappedFoo(): Wrap<'foo'> { +>wrappedFoo : () => Wrap<"foo"> + + return wrap('foo'); +>wrap('foo') : Wrap<"foo"> +>wrap : (value: T) => Wrap +>'foo' : "foo" +} + +function wrapBar(value: 'bar'): Wrap<'bar'> { +>wrapBar : (value: "bar") => Wrap<"bar"> +>value : "bar" + + return { value }; +>{ value } : { value: "bar"; } +>value : "bar" +} + +function wrappedBar(): Wrap<'bar'> { +>wrappedBar : () => Wrap<"bar"> + + const value = 'bar'; +>value : "bar" +>'bar' : "bar" + + const inferred = wrapBar(value); +>inferred : Wrap<"bar"> +>wrapBar(value) : Wrap<"bar"> +>wrapBar : (value: "bar") => Wrap<"bar"> +>value : "bar" + + const literal = wrapBar('bar'); +>literal : Wrap<"bar"> +>wrapBar('bar') : Wrap<"bar"> +>wrapBar : (value: "bar") => Wrap<"bar"> +>'bar' : "bar" + + const value2: string = 'bar'; +>value2 : string +>'bar' : "bar" + + const literal2 = wrapBar(value2); // Error +>literal2 : Wrap<"bar"> +>wrapBar(value2) : Wrap<"bar"> +>wrapBar : (value: "bar") => Wrap<"bar"> +>value2 : string + + return wrap(value); +>wrap(value) : Wrap<"bar"> +>wrap : (value: T) => Wrap +>value : "bar" +} + +function wrappedBaz(): Wrap<'baz'> { +>wrappedBaz : () => Wrap<"baz"> + + const value: 'baz' = 'baz'; +>value : "baz" +>'baz' : "baz" + + return wrap(value); +>wrap(value) : Wrap<"baz"> +>wrap : (value: T) => Wrap +>value : "baz" +} + +// Repro from #11152 + +interface FolderContentItem { + type: 'folder' | 'file'; +>type : "folder" | "file" +} + +let a: FolderContentItem[] = []; +>a : FolderContentItem[] +>[] : never[] + +a = [1, 2, 3, 4, 5].map(v => ({ type: 'folder' })); +>a = [1, 2, 3, 4, 5].map(v => ({ type: 'folder' })) : { type: "folder"; }[] +>a : FolderContentItem[] +>[1, 2, 3, 4, 5].map(v => ({ type: 'folder' })) : { type: "folder"; }[] +>[1, 2, 3, 4, 5].map : (callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[] +>[1, 2, 3, 4, 5] : number[] +>1 : 1 +>2 : 2 +>3 : 3 +>4 : 4 +>5 : 5 +>map : (callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[] +>v => ({ type: 'folder' }) : (v: number) => { type: "folder"; } +>v : number +>({ type: 'folder' }) : { type: "folder"; } +>{ type: 'folder' } : { type: "folder"; } +>type : "folder" +>'folder' : "folder" + +// Repro from #11312 + +let arr: Array<[number, number]> = [[1, 2]] +>arr : [number, number][] +>[[1, 2]] : [number, number][] +>[1, 2] : [number, number] +>1 : 1 +>2 : 2 + +let mappedArr: Array<[number, number]> = arr.map(([x, y]) => { +>mappedArr : [number, number][] +>arr.map(([x, y]) => { return [x, y];}) : [number, number][] +>arr.map : (callbackfn: (value: [number, number], index: number, array: [number, number][]) => U, thisArg?: any) => U[] +>arr : [number, number][] +>map : (callbackfn: (value: [number, number], index: number, array: [number, number][]) => U, thisArg?: any) => U[] +>([x, y]) => { return [x, y];} : ([x, y]: [number, number]) => [number, number] +>x : number +>y : number + + return [x, y]; +>[x, y] : [number, number] +>x : number +>y : number + +}) + +// Repro from #13594 + +export namespace DiagnosticSeverity { +>DiagnosticSeverity : typeof DiagnosticSeverity + + export const Error = 1; +>Error : 1 +>1 : 1 + + export const Warning = 2; +>Warning : 2 +>2 : 2 + + export const Information = 3; +>Information : 3 +>3 : 3 + + export const Hint = 4; +>Hint : 4 +>4 : 4 +} + +export type DiagnosticSeverity = 1 | 2 | 3 | 4; +>DiagnosticSeverity : DiagnosticSeverity + +export interface Diagnostic { + severity?: DiagnosticSeverity; +>severity : 1 | 2 | 3 | 4 | undefined + + code?: number | string; +>code : string | number | undefined + + source?: string; +>source : string | undefined + + message: string; +>message : string +} + +function bug(): Diagnostic[] { +>bug : () => Diagnostic[] + + let values: any[] = []; +>values : any[] +>[] : never[] + + return values.map((value) => { +>values.map((value) => { return { severity: DiagnosticSeverity.Error, message: 'message' } }) : { severity: 1; message: string; }[] +>values.map : (callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any) => U[] +>values : any[] +>map : (callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any) => U[] +>(value) => { return { severity: DiagnosticSeverity.Error, message: 'message' } } : (value: any) => { severity: 1; message: string; } +>value : any + + return { +>{ severity: DiagnosticSeverity.Error, message: 'message' } : { severity: 1; message: string; } + + severity: DiagnosticSeverity.Error, +>severity : 1 +>DiagnosticSeverity.Error : 1 +>DiagnosticSeverity : typeof DiagnosticSeverity +>Error : 1 + + message: 'message' +>message : string +>'message' : "message" + } + }); +} + +// Repro from #22870 + +function objectToMap(obj: any) { +>objectToMap : (obj: any) => Map +>obj : any + + return new Map(Object.keys(obj).map(key => [key, obj[key]])); +>new Map(Object.keys(obj).map(key => [key, obj[key]])) : Map +>Map : MapConstructor +>Object.keys(obj).map(key => [key, obj[key]]) : [string, any][] +>Object.keys(obj).map : (callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[] +>Object.keys(obj) : string[] +>Object.keys : (o: {}) => string[] +>Object : ObjectConstructor +>keys : (o: {}) => string[] +>obj : any +>map : (callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[] +>key => [key, obj[key]] : (key: string) => [string, any] +>key : string +>[key, obj[key]] : [string, any] +>key : string +>obj[key] : any +>obj : any +>key : string + +}; + +// Repro from #24352 + +interface Person { + phoneNumbers: { +>phoneNumbers : { __typename: "PhoneNumber"; }[] + + __typename: 'PhoneNumber'; +>__typename : "PhoneNumber" + + }[]; +} + +function createPerson(): Person { +>createPerson : () => Person + + return { +>{ phoneNumbers: [1].map(() => ({ __typename: 'PhoneNumber' })) } : { phoneNumbers: { __typename: "PhoneNumber"; }[]; } + + phoneNumbers: [1].map(() => ({ +>phoneNumbers : { __typename: "PhoneNumber"; }[] +>[1].map(() => ({ __typename: 'PhoneNumber' })) : { __typename: "PhoneNumber"; }[] +>[1].map : (callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[] +>[1] : number[] +>1 : 1 +>map : (callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[] +>() => ({ __typename: 'PhoneNumber' }) : () => { __typename: "PhoneNumber"; } +>({ __typename: 'PhoneNumber' }) : { __typename: "PhoneNumber"; } +>{ __typename: 'PhoneNumber' } : { __typename: "PhoneNumber"; } + + __typename: 'PhoneNumber' +>__typename : "PhoneNumber" +>'PhoneNumber' : "PhoneNumber" + + })) + }; +} + +// Repro from #26621 + +type Box = { value: T }; +>Box : Box +>value : T + +declare function box(value: T): Box; +>box : (value: T) => Box +>value : T + +type WinCondition = +>WinCondition : WinCondition + + | { type: 'win', player: string } +>type : "win" +>player : string + + | { type: 'draw' }; +>type : "draw" + +let zz: Box = box({ type: 'draw' }); +>zz : Box +>box({ type: 'draw' }) : Box<{ type: "draw"; }> +>box : (value: T) => Box +>{ type: 'draw' } : { type: "draw"; } +>type : "draw" +>'draw' : "draw" + +type WinType = 'win' | 'draw'; +>WinType : "win" | "draw" + +let yy: Box = box('draw'); +>yy : Box<"win" | "draw"> +>box('draw') : Box<"draw"> +>box : (value: T) => Box +>'draw' : "draw" + +// Repro from #27074 + +interface OK { + kind: "OK"; +>kind : "OK" + + value: T; +>value : T +} +export function ok(value: T): OK { +>ok : (value: T) => OK +>value : T + + return { +>{ kind: "OK", value: value } : { kind: "OK"; value: T; } + + kind: "OK", +>kind : "OK" +>"OK" : "OK" + + value: value +>value : T +>value : T + + }; +} + +let result: OK<[string, number]> = ok(["hello", 12]); +>result : OK<[string, number]> +>ok(["hello", 12]) : OK<[string, number]> +>ok : (value: T) => OK +>["hello", 12] : [string, number] +>"hello" : "hello" +>12 : 12 + +// Repro from #25889 + +interface I { + code: 'mapped', +>code : "mapped" + + name: string, +>name : string +} + +const a3: I[] = ['a', 'b'].map(name => { +>a3 : I[] +>['a', 'b'].map(name => { return { code: 'mapped', name, }}) : { code: "mapped"; name: string; }[] +>['a', 'b'].map : (callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[] +>['a', 'b'] : string[] +>'a' : "a" +>'b' : "b" +>map : (callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[] +>name => { return { code: 'mapped', name, }} : (name: string) => { code: "mapped"; name: string; } +>name : string + + return { +>{ code: 'mapped', name, } : { code: "mapped"; name: string; } + + code: 'mapped', +>code : "mapped" +>'mapped' : "mapped" + + name, +>name : string + } +}); + +// Repro from https://www.memsql.com/blog/porting-30k-lines-of-code-from-flow-to-typescript/ + +type Player = { +>Player : Player + + name: string; +>name : string + + age: number; +>age : number + + position: "STRIKER" | "GOALKEEPER", +>position : "STRIKER" | "GOALKEEPER" + +}; + +type F = () => Promise>; +>F : F + +const f1: F = () => { +>f1 : F +>() => { return Promise.all([ { name: "David Gomes", age: 23, position: "GOALKEEPER", }, { name: "Cristiano Ronaldo", age: 33, position: "STRIKER", } ]);} : () => Promise<[{ name: string; age: number; position: "GOALKEEPER"; }, { name: string; age: number; position: "STRIKER"; }]> + + return Promise.all([ +>Promise.all([ { name: "David Gomes", age: 23, position: "GOALKEEPER", }, { name: "Cristiano Ronaldo", age: 33, position: "STRIKER", } ]) : Promise<[{ name: string; age: number; position: "GOALKEEPER"; }, { name: string; age: number; position: "STRIKER"; }]> +>Promise.all : { (values: Iterable>): Promise; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike, T10 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike]): Promise<[T1, T2, T3, T4, T5]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike]): Promise<[T1, T2, T3, T4]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike]): Promise<[T1, T2, T3]>; (values: [T1 | PromiseLike, T2 | PromiseLike]): Promise<[T1, T2]>; (values: (T | PromiseLike)[]): Promise; } +>Promise : PromiseConstructor +>all : { (values: Iterable>): Promise; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike, T10 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike]): Promise<[T1, T2, T3, T4, T5]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike]): Promise<[T1, T2, T3, T4]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike]): Promise<[T1, T2, T3]>; (values: [T1 | PromiseLike, T2 | PromiseLike]): Promise<[T1, T2]>; (values: (T | PromiseLike)[]): Promise; } +>[ { name: "David Gomes", age: 23, position: "GOALKEEPER", }, { name: "Cristiano Ronaldo", age: 33, position: "STRIKER", } ] : [{ name: string; age: number; position: "GOALKEEPER"; }, { name: string; age: number; position: "STRIKER"; }] + { +>{ name: "David Gomes", age: 23, position: "GOALKEEPER", } : { name: string; age: number; position: "GOALKEEPER"; } + + name: "David Gomes", +>name : string +>"David Gomes" : "David Gomes" + + age: 23, +>age : number +>23 : 23 + + position: "GOALKEEPER", +>position : "GOALKEEPER" +>"GOALKEEPER" : "GOALKEEPER" + + }, { +>{ name: "Cristiano Ronaldo", age: 33, position: "STRIKER", } : { name: string; age: number; position: "STRIKER"; } + + name: "Cristiano Ronaldo", +>name : string +>"Cristiano Ronaldo" : "Cristiano Ronaldo" + + age: 33, +>age : number +>33 : 33 + + position: "STRIKER", +>position : "STRIKER" +>"STRIKER" : "STRIKER" + } + ]); +}; +