parent
2f1bd8cff9
commit
336df751ea
|
@ -497,6 +497,8 @@ namespace ts {
|
|||
const builtinGlobals = createSymbolTable();
|
||||
builtinGlobals.set(undefinedSymbol.escapedName, undefinedSymbol);
|
||||
|
||||
const isNotOverloadAndNotAccessor = and(isNotOverload, isNotAccessor);
|
||||
|
||||
initializeTypeChecker();
|
||||
|
||||
return checker;
|
||||
|
@ -22257,7 +22259,7 @@ namespace ts {
|
|||
if (flags & (SymbolFlags.Namespace | SymbolFlags.Interface | SymbolFlags.Enum)) {
|
||||
return;
|
||||
}
|
||||
const exportedDeclarationsCount = countWhere(declarations, isNotOverload);
|
||||
const exportedDeclarationsCount = countWhere(declarations, isNotOverloadAndNotAccessor);
|
||||
if (flags & SymbolFlags.TypeAlias && exportedDeclarationsCount <= 2) {
|
||||
// it is legal to merge type alias with other values
|
||||
// so count should be either 1 (just type alias) or 2 (type alias + merged value)
|
||||
|
@ -22273,11 +22275,16 @@ namespace ts {
|
|||
});
|
||||
links.exportsChecked = true;
|
||||
}
|
||||
}
|
||||
|
||||
function isNotOverload(declaration: Declaration): boolean {
|
||||
return (declaration.kind !== SyntaxKind.FunctionDeclaration && declaration.kind !== SyntaxKind.MethodDeclaration) ||
|
||||
!!(declaration as FunctionDeclaration).body;
|
||||
}
|
||||
function isNotAccessor(declaration: Declaration): boolean {
|
||||
// Accessors check for their own matching duplicates, and in contexts where they are valid, there are already duplicate identifier checks
|
||||
return !isAccessor(declaration);
|
||||
}
|
||||
|
||||
function isNotOverload(declaration: Declaration): boolean {
|
||||
return (declaration.kind !== SyntaxKind.FunctionDeclaration && declaration.kind !== SyntaxKind.MethodDeclaration) ||
|
||||
!!(declaration as FunctionDeclaration).body;
|
||||
}
|
||||
|
||||
function checkSourceElement(node: Node): void {
|
||||
|
|
|
@ -2626,4 +2626,8 @@ namespace ts {
|
|||
export function isCheckJsEnabledForFile(sourceFile: SourceFile, compilerOptions: CompilerOptions) {
|
||||
return sourceFile.checkJsDirective ? sourceFile.checkJsDirective.enabled : compilerOptions.checkJs;
|
||||
}
|
||||
|
||||
export function and<T>(f: (arg: T) => boolean, g: (arg: T) => boolean) {
|
||||
return (arg: T) => f(arg) && g(arg);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
//// [exportEqualsClassNoRedeclarationError.ts]
|
||||
class SomeClass {
|
||||
static get someProp(): number {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static set someProp(value: number) {}
|
||||
}
|
||||
export = SomeClass;
|
||||
|
||||
//// [exportEqualsClassNoRedeclarationError.js]
|
||||
"use strict";
|
||||
class SomeClass {
|
||||
static get someProp() {
|
||||
return 0;
|
||||
}
|
||||
static set someProp(value) { }
|
||||
}
|
||||
module.exports = SomeClass;
|
|
@ -0,0 +1,17 @@
|
|||
=== tests/cases/compiler/exportEqualsClassNoRedeclarationError.ts ===
|
||||
class SomeClass {
|
||||
>SomeClass : Symbol(SomeClass, Decl(exportEqualsClassNoRedeclarationError.ts, 0, 0))
|
||||
|
||||
static get someProp(): number {
|
||||
>someProp : Symbol(SomeClass.someProp, Decl(exportEqualsClassNoRedeclarationError.ts, 0, 17), Decl(exportEqualsClassNoRedeclarationError.ts, 3, 5))
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static set someProp(value: number) {}
|
||||
>someProp : Symbol(SomeClass.someProp, Decl(exportEqualsClassNoRedeclarationError.ts, 0, 17), Decl(exportEqualsClassNoRedeclarationError.ts, 3, 5))
|
||||
>value : Symbol(value, Decl(exportEqualsClassNoRedeclarationError.ts, 5, 24))
|
||||
}
|
||||
export = SomeClass;
|
||||
>SomeClass : Symbol(SomeClass, Decl(exportEqualsClassNoRedeclarationError.ts, 0, 0))
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
=== tests/cases/compiler/exportEqualsClassNoRedeclarationError.ts ===
|
||||
class SomeClass {
|
||||
>SomeClass : SomeClass
|
||||
|
||||
static get someProp(): number {
|
||||
>someProp : number
|
||||
|
||||
return 0;
|
||||
>0 : 0
|
||||
}
|
||||
|
||||
static set someProp(value: number) {}
|
||||
>someProp : number
|
||||
>value : number
|
||||
}
|
||||
export = SomeClass;
|
||||
>SomeClass : SomeClass
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
tests/cases/compiler/exportEqualsClassRedeclarationError.ts(2,16): error TS2300: Duplicate identifier 'someProp'.
|
||||
tests/cases/compiler/exportEqualsClassRedeclarationError.ts(6,16): error TS2300: Duplicate identifier 'someProp'.
|
||||
tests/cases/compiler/exportEqualsClassRedeclarationError.ts(7,16): error TS2300: Duplicate identifier 'someProp'.
|
||||
|
||||
|
||||
==== tests/cases/compiler/exportEqualsClassRedeclarationError.ts (3 errors) ====
|
||||
class SomeClass {
|
||||
static get someProp(): number {
|
||||
~~~~~~~~
|
||||
!!! error TS2300: Duplicate identifier 'someProp'.
|
||||
return 0;
|
||||
}
|
||||
|
||||
static set someProp(value: number) {}
|
||||
~~~~~~~~
|
||||
!!! error TS2300: Duplicate identifier 'someProp'.
|
||||
static set someProp(value: number) {}
|
||||
~~~~~~~~
|
||||
!!! error TS2300: Duplicate identifier 'someProp'.
|
||||
}
|
||||
export = SomeClass;
|
|
@ -0,0 +1,21 @@
|
|||
//// [exportEqualsClassRedeclarationError.ts]
|
||||
class SomeClass {
|
||||
static get someProp(): number {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static set someProp(value: number) {}
|
||||
static set someProp(value: number) {}
|
||||
}
|
||||
export = SomeClass;
|
||||
|
||||
//// [exportEqualsClassRedeclarationError.js]
|
||||
"use strict";
|
||||
class SomeClass {
|
||||
static get someProp() {
|
||||
return 0;
|
||||
}
|
||||
static set someProp(value) { }
|
||||
static set someProp(value) { }
|
||||
}
|
||||
module.exports = SomeClass;
|
|
@ -0,0 +1,10 @@
|
|||
// @target: es6
|
||||
// @module: commonjs
|
||||
class SomeClass {
|
||||
static get someProp(): number {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static set someProp(value: number) {}
|
||||
}
|
||||
export = SomeClass;
|
11
tests/cases/compiler/exportEqualsClassRedeclarationError.ts
Normal file
11
tests/cases/compiler/exportEqualsClassRedeclarationError.ts
Normal file
|
@ -0,0 +1,11 @@
|
|||
// @target: es6
|
||||
// @module: commonjs
|
||||
class SomeClass {
|
||||
static get someProp(): number {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static set someProp(value: number) {}
|
||||
static set someProp(value: number) {}
|
||||
}
|
||||
export = SomeClass;
|
Loading…
Reference in a new issue