From 86ff3f6fec26343fbb28bf1facf315436518c8ea Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 8 Jun 2022 16:32:18 -0700 Subject: [PATCH] Give cjs export assigned types an alias symbol (#49407) --- src/compiler/checker.ts | 14 ++++++++++++++ .../jsDeclarationEmitExportAssignedArray.js | 12 ++++++++++++ .../jsDeclarationEmitExportAssignedArray.symbols | 9 +++++++++ .../jsDeclarationEmitExportAssignedArray.types | 15 +++++++++++++++ .../jsDeclarationsImportTypeBundled.types | 8 ++++---- ...larationsTypeReassignmentFromDeclaration.types | 8 ++++---- ...arationsTypeReassignmentFromDeclaration2.types | 8 ++++---- .../jsDeclarationEmitExportAssignedArray.ts | 6 ++++++ 8 files changed, 68 insertions(+), 12 deletions(-) create mode 100644 tests/baselines/reference/jsDeclarationEmitExportAssignedArray.js create mode 100644 tests/baselines/reference/jsDeclarationEmitExportAssignedArray.symbols create mode 100644 tests/baselines/reference/jsDeclarationEmitExportAssignedArray.types create mode 100644 tests/cases/compiler/jsDeclarationEmitExportAssignedArray.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 2bea3c88536..c3dc9969729 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5002,6 +5002,9 @@ namespace ts { if (!inTypeAlias && type.aliasSymbol && (context.flags & NodeBuilderFlags.UseAliasDefinedOutsideCurrentScope || isTypeSymbolAccessible(type.aliasSymbol, context.enclosingDeclaration))) { const typeArgumentNodes = mapToTypeNodes(type.aliasTypeArguments, context); if (isReservedMemberName(type.aliasSymbol.escapedName) && !(type.aliasSymbol.flags & SymbolFlags.Class)) return factory.createTypeReferenceNode(factory.createIdentifier(""), typeArgumentNodes); + if (length(typeArgumentNodes) === 1 && type.aliasSymbol === globalArrayType.symbol) { + return factory.createArrayTypeNode(typeArgumentNodes![0]); + } return symbolToTypeNode(type.aliasSymbol, context, SymbolFlags.Type, typeArgumentNodes); } @@ -9357,6 +9360,17 @@ namespace ts { exportedType.callSignatures, exportedType.constructSignatures, exportedType.indexInfos); + if (initialSize === members.size) { + if (type.aliasSymbol) { + result.aliasSymbol = type.aliasSymbol; + result.aliasTypeArguments = type.aliasTypeArguments; + } + if (getObjectFlags(type) & ObjectFlags.Reference) { + result.aliasSymbol = (type as TypeReference).symbol; + const args = getTypeArguments(type as TypeReference); + result.aliasTypeArguments = length(args) ? args : undefined; + } + } result.objectFlags |= (getObjectFlags(type) & ObjectFlags.JSLiteral); // Propagate JSLiteral flag if (result.symbol && result.symbol.flags & SymbolFlags.Class && type === getDeclaredTypeOfClassOrInterface(result.symbol)) { result.objectFlags |= ObjectFlags.IsClassInstanceClone; // Propagate the knowledge that this type is equivalent to the symbol's class instance type diff --git a/tests/baselines/reference/jsDeclarationEmitExportAssignedArray.js b/tests/baselines/reference/jsDeclarationEmitExportAssignedArray.js new file mode 100644 index 00000000000..78a0d1e3bf6 --- /dev/null +++ b/tests/baselines/reference/jsDeclarationEmitExportAssignedArray.js @@ -0,0 +1,12 @@ +//// [file.js] +module.exports = [{ name: 'other', displayName: 'Other', defaultEnabled: true }]; + + + +//// [file.d.ts] +declare const _exports: { + name: string; + displayName: string; + defaultEnabled: boolean; +}[]; +export = _exports; diff --git a/tests/baselines/reference/jsDeclarationEmitExportAssignedArray.symbols b/tests/baselines/reference/jsDeclarationEmitExportAssignedArray.symbols new file mode 100644 index 00000000000..22a84fb9f5c --- /dev/null +++ b/tests/baselines/reference/jsDeclarationEmitExportAssignedArray.symbols @@ -0,0 +1,9 @@ +=== tests/cases/compiler/file.js === +module.exports = [{ name: 'other', displayName: 'Other', defaultEnabled: true }]; +>module.exports : Symbol(module.exports, Decl(file.js, 0, 0)) +>module : Symbol(export=, Decl(file.js, 0, 0)) +>exports : Symbol(export=, Decl(file.js, 0, 0)) +>name : Symbol(name, Decl(file.js, 0, 19)) +>displayName : Symbol(displayName, Decl(file.js, 0, 34)) +>defaultEnabled : Symbol(defaultEnabled, Decl(file.js, 0, 56)) + diff --git a/tests/baselines/reference/jsDeclarationEmitExportAssignedArray.types b/tests/baselines/reference/jsDeclarationEmitExportAssignedArray.types new file mode 100644 index 00000000000..7bc016eed53 --- /dev/null +++ b/tests/baselines/reference/jsDeclarationEmitExportAssignedArray.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/file.js === +module.exports = [{ name: 'other', displayName: 'Other', defaultEnabled: true }]; +>module.exports = [{ name: 'other', displayName: 'Other', defaultEnabled: true }] : { name: string; displayName: string; defaultEnabled: boolean; }[] +>module.exports : { name: string; displayName: string; defaultEnabled: boolean; }[] +>module : { exports: { name: string; displayName: string; defaultEnabled: boolean; }[]; } +>exports : { name: string; displayName: string; defaultEnabled: boolean; }[] +>[{ name: 'other', displayName: 'Other', defaultEnabled: true }] : { name: string; displayName: string; defaultEnabled: boolean; }[] +>{ name: 'other', displayName: 'Other', defaultEnabled: true } : { name: string; displayName: string; defaultEnabled: boolean; } +>name : string +>'other' : "other" +>displayName : string +>'Other' : "Other" +>defaultEnabled : boolean +>true : true + diff --git a/tests/baselines/reference/jsDeclarationsImportTypeBundled.types b/tests/baselines/reference/jsDeclarationsImportTypeBundled.types index c11b49b1c27..07a66b84e70 100644 --- a/tests/baselines/reference/jsDeclarationsImportTypeBundled.types +++ b/tests/baselines/reference/jsDeclarationsImportTypeBundled.types @@ -28,9 +28,9 @@ const items = [{x: 12}]; >12 : 12 module.exports = items; ->module.exports = items : { [n: number]: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; length: number; toString(): string; toLocaleString(): string; pop(): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; push(...items: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]): number; concat(...items: ConcatArray[]): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; concat(...items: (import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item | ConcatArray)[]): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; join(separator?: string): string; reverse(): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; shift(): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; slice(start?: number, end?: number): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; sort(compareFn?: (a: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, b: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item) => number): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; splice(start: number, deleteCount?: number): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; splice(start: number, deleteCount: number, ...items: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; unshift(...items: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]): number; indexOf(searchElement: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, fromIndex?: number): number; lastIndexOf(searchElement: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, fromIndex?: number): number; every(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => value is S, thisArg?: any): this is S[]; every(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => unknown, thisArg?: any): boolean; some(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => unknown, thisArg?: any): boolean; forEach(callbackfn: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => void, thisArg?: any): void; map(callbackfn: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => U, thisArg?: any): U[]; filter(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => value is S, thisArg?: any): S[]; filter(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => unknown, thisArg?: any): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; reduce(callbackfn: (previousValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; reduce(callbackfn: (previousValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, initialValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; reduce(callbackfn: (previousValue: U, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; reduceRight(callbackfn: (previousValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, initialValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; reduceRight(callbackfn: (previousValue: U, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => U, initialValue: U): U; } ->module.exports : { [n: number]: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; length: number; toString(): string; toLocaleString(): string; pop(): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; push(...items: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]): number; concat(...items: ConcatArray[]): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; concat(...items: (import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item | ConcatArray)[]): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; join(separator?: string): string; reverse(): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; shift(): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; slice(start?: number, end?: number): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; sort(compareFn?: (a: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, b: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item) => number): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; splice(start: number, deleteCount?: number): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; splice(start: number, deleteCount: number, ...items: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; unshift(...items: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]): number; indexOf(searchElement: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, fromIndex?: number): number; lastIndexOf(searchElement: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, fromIndex?: number): number; every(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => value is S, thisArg?: any): this is S[]; every(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => unknown, thisArg?: any): boolean; some(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => unknown, thisArg?: any): boolean; forEach(callbackfn: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => void, thisArg?: any): void; map(callbackfn: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => U, thisArg?: any): U[]; filter(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => value is S, thisArg?: any): S[]; filter(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => unknown, thisArg?: any): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; reduce(callbackfn: (previousValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; reduce(callbackfn: (previousValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, initialValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; reduce(callbackfn: (previousValue: U, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; reduceRight(callbackfn: (previousValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, initialValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; reduceRight(callbackfn: (previousValue: U, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => U, initialValue: U): U; } ->module : { exports: { [n: number]: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; length: number; toString(): string; toLocaleString(): string; pop(): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; push(...items: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]): number; concat(...items: ConcatArray[]): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; concat(...items: (import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item | ConcatArray)[]): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; join(separator?: string): string; reverse(): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; shift(): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; slice(start?: number, end?: number): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; sort(compareFn?: (a: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, b: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item) => number): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; splice(start: number, deleteCount?: number): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; splice(start: number, deleteCount: number, ...items: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; unshift(...items: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]): number; indexOf(searchElement: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, fromIndex?: number): number; lastIndexOf(searchElement: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, fromIndex?: number): number; every(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => value is S, thisArg?: any): this is S[]; every(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => unknown, thisArg?: any): boolean; some(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => unknown, thisArg?: any): boolean; forEach(callbackfn: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => void, thisArg?: any): void; map(callbackfn: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => U, thisArg?: any): U[]; filter(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => value is S, thisArg?: any): S[]; filter(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => unknown, thisArg?: any): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; reduce(callbackfn: (previousValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; reduce(callbackfn: (previousValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, initialValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; reduce(callbackfn: (previousValue: U, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; reduceRight(callbackfn: (previousValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, initialValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; reduceRight(callbackfn: (previousValue: U, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => U, initialValue: U): U; }; } ->exports : { [n: number]: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; length: number; toString(): string; toLocaleString(): string; pop(): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; push(...items: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]): number; concat(...items: ConcatArray[]): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; concat(...items: (import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item | ConcatArray)[]): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; join(separator?: string): string; reverse(): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; shift(): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; slice(start?: number, end?: number): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; sort(compareFn?: (a: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, b: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item) => number): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; splice(start: number, deleteCount?: number): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; splice(start: number, deleteCount: number, ...items: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; unshift(...items: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]): number; indexOf(searchElement: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, fromIndex?: number): number; lastIndexOf(searchElement: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, fromIndex?: number): number; every(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => value is S, thisArg?: any): this is S[]; every(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => unknown, thisArg?: any): boolean; some(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => unknown, thisArg?: any): boolean; forEach(callbackfn: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => void, thisArg?: any): void; map(callbackfn: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => U, thisArg?: any): U[]; filter(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => value is S, thisArg?: any): S[]; filter(predicate: (value: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, index: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => unknown, thisArg?: any): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; reduce(callbackfn: (previousValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; reduce(callbackfn: (previousValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, initialValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; reduce(callbackfn: (previousValue: U, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; reduceRight(callbackfn: (previousValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, initialValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item): import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item; reduceRight(callbackfn: (previousValue: U, currentValue: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item, currentIndex: number, array: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]) => U, initialValue: U): U; } +>module.exports = items : import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[] +>module.exports : import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[] +>module : { exports: import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[]; } +>exports : import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[] >items : import("tests/cases/conformance/jsdoc/declarations/folder/mod1").Item[] diff --git a/tests/baselines/reference/jsDeclarationsTypeReassignmentFromDeclaration.types b/tests/baselines/reference/jsDeclarationsTypeReassignmentFromDeclaration.types index fc514b7a0bc..36acdb91b7f 100644 --- a/tests/baselines/reference/jsDeclarationsTypeReassignmentFromDeclaration.types +++ b/tests/baselines/reference/jsDeclarationsTypeReassignmentFromDeclaration.types @@ -16,9 +16,9 @@ const items = []; >[] : undefined[] module.exports = items; ->module.exports = items : { [n: number]: Item; length: number; toString(): string; toLocaleString(): string; pop(): Item; push(...items: Item[]): number; concat(...items: ConcatArray[]): Item[]; concat(...items: (Item | ConcatArray)[]): Item[]; join(separator?: string): string; reverse(): Item[]; shift(): Item; slice(start?: number, end?: number): Item[]; sort(compareFn?: (a: Item, b: Item) => number): Item[]; splice(start: number, deleteCount?: number): Item[]; splice(start: number, deleteCount: number, ...items: Item[]): Item[]; unshift(...items: Item[]): number; indexOf(searchElement: Item, fromIndex?: number): number; lastIndexOf(searchElement: Item, fromIndex?: number): number; every(predicate: (value: Item, index: number, array: Item[]) => value is S, thisArg?: any): this is S[]; every(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): boolean; some(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): boolean; forEach(callbackfn: (value: Item, index: number, array: Item[]) => void, thisArg?: any): void; map(callbackfn: (value: Item, index: number, array: Item[]) => U, thisArg?: any): U[]; filter(predicate: (value: Item, index: number, array: Item[]) => value is S, thisArg?: any): S[]; filter(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): Item[]; reduce(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item): Item; reduce(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item, initialValue: Item): Item; reduce(callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item): Item; reduceRight(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item, initialValue: Item): Item; reduceRight(callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U): U; find(predicate: (this: void, value: Item, index: number, obj: Item[]) => value is S, thisArg?: any): S; find(predicate: (value: Item, index: number, obj: Item[]) => unknown, thisArg?: any): Item; findIndex(predicate: (value: Item, index: number, obj: Item[]) => unknown, thisArg?: any): number; fill(value: Item, start?: number, end?: number): Item[]; copyWithin(target: number, start: number, end?: number): Item[]; entries(): IterableIterator<[number, Item]>; keys(): IterableIterator; values(): IterableIterator; [Symbol.iterator](): IterableIterator; [Symbol.unscopables](): { copyWithin: boolean; entries: boolean; fill: boolean; find: boolean; findIndex: boolean; keys: boolean; values: boolean; }; } ->module.exports : { [n: number]: Item; length: number; toString(): string; toLocaleString(): string; pop(): Item; push(...items: Item[]): number; concat(...items: ConcatArray[]): Item[]; concat(...items: (Item | ConcatArray)[]): Item[]; join(separator?: string): string; reverse(): Item[]; shift(): Item; slice(start?: number, end?: number): Item[]; sort(compareFn?: (a: Item, b: Item) => number): Item[]; splice(start: number, deleteCount?: number): Item[]; splice(start: number, deleteCount: number, ...items: Item[]): Item[]; unshift(...items: Item[]): number; indexOf(searchElement: Item, fromIndex?: number): number; lastIndexOf(searchElement: Item, fromIndex?: number): number; every(predicate: (value: Item, index: number, array: Item[]) => value is S, thisArg?: any): this is S[]; every(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): boolean; some(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): boolean; forEach(callbackfn: (value: Item, index: number, array: Item[]) => void, thisArg?: any): void; map(callbackfn: (value: Item, index: number, array: Item[]) => U, thisArg?: any): U[]; filter(predicate: (value: Item, index: number, array: Item[]) => value is S, thisArg?: any): S[]; filter(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): Item[]; reduce(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item): Item; reduce(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item, initialValue: Item): Item; reduce(callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item): Item; reduceRight(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item, initialValue: Item): Item; reduceRight(callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U): U; find(predicate: (this: void, value: Item, index: number, obj: Item[]) => value is S, thisArg?: any): S; find(predicate: (value: Item, index: number, obj: Item[]) => unknown, thisArg?: any): Item; findIndex(predicate: (value: Item, index: number, obj: Item[]) => unknown, thisArg?: any): number; fill(value: Item, start?: number, end?: number): Item[]; copyWithin(target: number, start: number, end?: number): Item[]; entries(): IterableIterator<[number, Item]>; keys(): IterableIterator; values(): IterableIterator; [Symbol.iterator](): IterableIterator; [Symbol.unscopables](): { copyWithin: boolean; entries: boolean; fill: boolean; find: boolean; findIndex: boolean; keys: boolean; values: boolean; }; } ->module : { exports: { [n: number]: Item; length: number; toString(): string; toLocaleString(): string; pop(): Item; push(...items: Item[]): number; concat(...items: ConcatArray[]): Item[]; concat(...items: (Item | ConcatArray)[]): Item[]; join(separator?: string): string; reverse(): Item[]; shift(): Item; slice(start?: number, end?: number): Item[]; sort(compareFn?: (a: Item, b: Item) => number): Item[]; splice(start: number, deleteCount?: number): Item[]; splice(start: number, deleteCount: number, ...items: Item[]): Item[]; unshift(...items: Item[]): number; indexOf(searchElement: Item, fromIndex?: number): number; lastIndexOf(searchElement: Item, fromIndex?: number): number; every(predicate: (value: Item, index: number, array: Item[]) => value is S, thisArg?: any): this is S[]; every(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): boolean; some(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): boolean; forEach(callbackfn: (value: Item, index: number, array: Item[]) => void, thisArg?: any): void; map(callbackfn: (value: Item, index: number, array: Item[]) => U, thisArg?: any): U[]; filter(predicate: (value: Item, index: number, array: Item[]) => value is S, thisArg?: any): S[]; filter(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): Item[]; reduce(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item): Item; reduce(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item, initialValue: Item): Item; reduce(callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item): Item; reduceRight(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item, initialValue: Item): Item; reduceRight(callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U): U; find(predicate: (this: void, value: Item, index: number, obj: Item[]) => value is S, thisArg?: any): S; find(predicate: (value: Item, index: number, obj: Item[]) => unknown, thisArg?: any): Item; findIndex(predicate: (value: Item, index: number, obj: Item[]) => unknown, thisArg?: any): number; fill(value: Item, start?: number, end?: number): Item[]; copyWithin(target: number, start: number, end?: number): Item[]; entries(): IterableIterator<[number, Item]>; keys(): IterableIterator; values(): IterableIterator; [Symbol.iterator](): IterableIterator; [Symbol.unscopables](): { copyWithin: boolean; entries: boolean; fill: boolean; find: boolean; findIndex: boolean; keys: boolean; values: boolean; }; }; } ->exports : { [n: number]: Item; length: number; toString(): string; toLocaleString(): string; pop(): Item; push(...items: Item[]): number; concat(...items: ConcatArray[]): Item[]; concat(...items: (Item | ConcatArray)[]): Item[]; join(separator?: string): string; reverse(): Item[]; shift(): Item; slice(start?: number, end?: number): Item[]; sort(compareFn?: (a: Item, b: Item) => number): Item[]; splice(start: number, deleteCount?: number): Item[]; splice(start: number, deleteCount: number, ...items: Item[]): Item[]; unshift(...items: Item[]): number; indexOf(searchElement: Item, fromIndex?: number): number; lastIndexOf(searchElement: Item, fromIndex?: number): number; every(predicate: (value: Item, index: number, array: Item[]) => value is S, thisArg?: any): this is S[]; every(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): boolean; some(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): boolean; forEach(callbackfn: (value: Item, index: number, array: Item[]) => void, thisArg?: any): void; map(callbackfn: (value: Item, index: number, array: Item[]) => U, thisArg?: any): U[]; filter(predicate: (value: Item, index: number, array: Item[]) => value is S, thisArg?: any): S[]; filter(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): Item[]; reduce(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item): Item; reduce(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item, initialValue: Item): Item; reduce(callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item): Item; reduceRight(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item, initialValue: Item): Item; reduceRight(callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U): U; find(predicate: (this: void, value: Item, index: number, obj: Item[]) => value is S, thisArg?: any): S; find(predicate: (value: Item, index: number, obj: Item[]) => unknown, thisArg?: any): Item; findIndex(predicate: (value: Item, index: number, obj: Item[]) => unknown, thisArg?: any): number; fill(value: Item, start?: number, end?: number): Item[]; copyWithin(target: number, start: number, end?: number): Item[]; entries(): IterableIterator<[number, Item]>; keys(): IterableIterator; values(): IterableIterator; [Symbol.iterator](): IterableIterator; [Symbol.unscopables](): { copyWithin: boolean; entries: boolean; fill: boolean; find: boolean; findIndex: boolean; keys: boolean; values: boolean; }; } +>module.exports = items : Item[] +>module.exports : Item[] +>module : { exports: Item[]; } +>exports : Item[] >items : Item[] diff --git a/tests/baselines/reference/jsDeclarationsTypeReassignmentFromDeclaration2.types b/tests/baselines/reference/jsDeclarationsTypeReassignmentFromDeclaration2.types index 6fdc6da24a0..2593e96b446 100644 --- a/tests/baselines/reference/jsDeclarationsTypeReassignmentFromDeclaration2.types +++ b/tests/baselines/reference/jsDeclarationsTypeReassignmentFromDeclaration2.types @@ -7,10 +7,10 @@ const items = require("./some-mod")(); >"./some-mod" : "./some-mod" module.exports = items; ->module.exports = items : { [n: number]: Item; length: number; toString(): string; toLocaleString(): string; pop(): Item; push(...items: Item[]): number; concat(...items: ConcatArray[]): Item[]; concat(...items: (Item | ConcatArray)[]): Item[]; join(separator?: string): string; reverse(): Item[]; shift(): Item; slice(start?: number, end?: number): Item[]; sort(compareFn?: (a: Item, b: Item) => number): Item[]; splice(start: number, deleteCount?: number): Item[]; splice(start: number, deleteCount: number, ...items: Item[]): Item[]; unshift(...items: Item[]): number; indexOf(searchElement: Item, fromIndex?: number): number; lastIndexOf(searchElement: Item, fromIndex?: number): number; every(predicate: (value: Item, index: number, array: Item[]) => value is S, thisArg?: any): this is S[]; every(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): boolean; some(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): boolean; forEach(callbackfn: (value: Item, index: number, array: Item[]) => void, thisArg?: any): void; map(callbackfn: (value: Item, index: number, array: Item[]) => U, thisArg?: any): U[]; filter(predicate: (value: Item, index: number, array: Item[]) => value is S, thisArg?: any): S[]; filter(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): Item[]; reduce(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item): Item; reduce(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item, initialValue: Item): Item; reduce(callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item): Item; reduceRight(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item, initialValue: Item): Item; reduceRight(callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U): U; find(predicate: (this: void, value: Item, index: number, obj: Item[]) => value is S, thisArg?: any): S; find(predicate: (value: Item, index: number, obj: Item[]) => unknown, thisArg?: any): Item; findIndex(predicate: (value: Item, index: number, obj: Item[]) => unknown, thisArg?: any): number; fill(value: Item, start?: number, end?: number): Item[]; copyWithin(target: number, start: number, end?: number): Item[]; entries(): IterableIterator<[number, Item]>; keys(): IterableIterator; values(): IterableIterator; [Symbol.iterator](): IterableIterator; [Symbol.unscopables](): { copyWithin: boolean; entries: boolean; fill: boolean; find: boolean; findIndex: boolean; keys: boolean; values: boolean; }; } ->module.exports : { [n: number]: Item; length: number; toString(): string; toLocaleString(): string; pop(): Item; push(...items: Item[]): number; concat(...items: ConcatArray[]): Item[]; concat(...items: (Item | ConcatArray)[]): Item[]; join(separator?: string): string; reverse(): Item[]; shift(): Item; slice(start?: number, end?: number): Item[]; sort(compareFn?: (a: Item, b: Item) => number): Item[]; splice(start: number, deleteCount?: number): Item[]; splice(start: number, deleteCount: number, ...items: Item[]): Item[]; unshift(...items: Item[]): number; indexOf(searchElement: Item, fromIndex?: number): number; lastIndexOf(searchElement: Item, fromIndex?: number): number; every(predicate: (value: Item, index: number, array: Item[]) => value is S, thisArg?: any): this is S[]; every(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): boolean; some(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): boolean; forEach(callbackfn: (value: Item, index: number, array: Item[]) => void, thisArg?: any): void; map(callbackfn: (value: Item, index: number, array: Item[]) => U, thisArg?: any): U[]; filter(predicate: (value: Item, index: number, array: Item[]) => value is S, thisArg?: any): S[]; filter(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): Item[]; reduce(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item): Item; reduce(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item, initialValue: Item): Item; reduce(callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item): Item; reduceRight(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item, initialValue: Item): Item; reduceRight(callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U): U; find(predicate: (this: void, value: Item, index: number, obj: Item[]) => value is S, thisArg?: any): S; find(predicate: (value: Item, index: number, obj: Item[]) => unknown, thisArg?: any): Item; findIndex(predicate: (value: Item, index: number, obj: Item[]) => unknown, thisArg?: any): number; fill(value: Item, start?: number, end?: number): Item[]; copyWithin(target: number, start: number, end?: number): Item[]; entries(): IterableIterator<[number, Item]>; keys(): IterableIterator; values(): IterableIterator; [Symbol.iterator](): IterableIterator; [Symbol.unscopables](): { copyWithin: boolean; entries: boolean; fill: boolean; find: boolean; findIndex: boolean; keys: boolean; values: boolean; }; } ->module : { exports: { [n: number]: Item; length: number; toString(): string; toLocaleString(): string; pop(): Item; push(...items: Item[]): number; concat(...items: ConcatArray[]): Item[]; concat(...items: (Item | ConcatArray)[]): Item[]; join(separator?: string): string; reverse(): Item[]; shift(): Item; slice(start?: number, end?: number): Item[]; sort(compareFn?: (a: Item, b: Item) => number): Item[]; splice(start: number, deleteCount?: number): Item[]; splice(start: number, deleteCount: number, ...items: Item[]): Item[]; unshift(...items: Item[]): number; indexOf(searchElement: Item, fromIndex?: number): number; lastIndexOf(searchElement: Item, fromIndex?: number): number; every(predicate: (value: Item, index: number, array: Item[]) => value is S, thisArg?: any): this is S[]; every(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): boolean; some(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): boolean; forEach(callbackfn: (value: Item, index: number, array: Item[]) => void, thisArg?: any): void; map(callbackfn: (value: Item, index: number, array: Item[]) => U, thisArg?: any): U[]; filter(predicate: (value: Item, index: number, array: Item[]) => value is S, thisArg?: any): S[]; filter(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): Item[]; reduce(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item): Item; reduce(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item, initialValue: Item): Item; reduce(callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item): Item; reduceRight(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item, initialValue: Item): Item; reduceRight(callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U): U; find(predicate: (this: void, value: Item, index: number, obj: Item[]) => value is S, thisArg?: any): S; find(predicate: (value: Item, index: number, obj: Item[]) => unknown, thisArg?: any): Item; findIndex(predicate: (value: Item, index: number, obj: Item[]) => unknown, thisArg?: any): number; fill(value: Item, start?: number, end?: number): Item[]; copyWithin(target: number, start: number, end?: number): Item[]; entries(): IterableIterator<[number, Item]>; keys(): IterableIterator; values(): IterableIterator; [Symbol.iterator](): IterableIterator; [Symbol.unscopables](): { copyWithin: boolean; entries: boolean; fill: boolean; find: boolean; findIndex: boolean; keys: boolean; values: boolean; }; }; } ->exports : { [n: number]: Item; length: number; toString(): string; toLocaleString(): string; pop(): Item; push(...items: Item[]): number; concat(...items: ConcatArray[]): Item[]; concat(...items: (Item | ConcatArray)[]): Item[]; join(separator?: string): string; reverse(): Item[]; shift(): Item; slice(start?: number, end?: number): Item[]; sort(compareFn?: (a: Item, b: Item) => number): Item[]; splice(start: number, deleteCount?: number): Item[]; splice(start: number, deleteCount: number, ...items: Item[]): Item[]; unshift(...items: Item[]): number; indexOf(searchElement: Item, fromIndex?: number): number; lastIndexOf(searchElement: Item, fromIndex?: number): number; every(predicate: (value: Item, index: number, array: Item[]) => value is S, thisArg?: any): this is S[]; every(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): boolean; some(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): boolean; forEach(callbackfn: (value: Item, index: number, array: Item[]) => void, thisArg?: any): void; map(callbackfn: (value: Item, index: number, array: Item[]) => U, thisArg?: any): U[]; filter(predicate: (value: Item, index: number, array: Item[]) => value is S, thisArg?: any): S[]; filter(predicate: (value: Item, index: number, array: Item[]) => unknown, thisArg?: any): Item[]; reduce(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item): Item; reduce(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item, initialValue: Item): Item; reduce(callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item): Item; reduceRight(callbackfn: (previousValue: Item, currentValue: Item, currentIndex: number, array: Item[]) => Item, initialValue: Item): Item; reduceRight(callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U): U; find(predicate: (this: void, value: Item, index: number, obj: Item[]) => value is S, thisArg?: any): S; find(predicate: (value: Item, index: number, obj: Item[]) => unknown, thisArg?: any): Item; findIndex(predicate: (value: Item, index: number, obj: Item[]) => unknown, thisArg?: any): number; fill(value: Item, start?: number, end?: number): Item[]; copyWithin(target: number, start: number, end?: number): Item[]; entries(): IterableIterator<[number, Item]>; keys(): IterableIterator; values(): IterableIterator; [Symbol.iterator](): IterableIterator; [Symbol.unscopables](): { copyWithin: boolean; entries: boolean; fill: boolean; find: boolean; findIndex: boolean; keys: boolean; values: boolean; }; } +>module.exports = items : Item[] +>module.exports : Item[] +>module : { exports: Item[]; } +>exports : Item[] >items : Item[] === tests/cases/conformance/jsdoc/declarations/some-mod.d.ts === diff --git a/tests/cases/compiler/jsDeclarationEmitExportAssignedArray.ts b/tests/cases/compiler/jsDeclarationEmitExportAssignedArray.ts new file mode 100644 index 00000000000..fca79854d8c --- /dev/null +++ b/tests/cases/compiler/jsDeclarationEmitExportAssignedArray.ts @@ -0,0 +1,6 @@ +// @allowJs: true +// @checkJs: true +// @emitDeclarationOnly: true +// @declaration: true +// @filename: file.js +module.exports = [{ name: 'other', displayName: 'Other', defaultEnabled: true }]; \ No newline at end of file