From 33f362abafbd68603d55756a84aaca828c368f87 Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Thu, 1 Aug 2019 11:24:04 -0700 Subject: [PATCH] =?UTF-8?q?Don=E2=80=99t=20issue=20used-before-initializat?= =?UTF-8?q?ion=20errors=20in=20declaration=20files=20(#32579)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/compiler/checker.ts | 2 +- ...BeforeDefinitionInDeclarationFiles.symbols | 26 +++++++++++++++++++ ...seBeforeDefinitionInDeclarationFiles.types | 26 +++++++++++++++++++ .../useBeforeDefinitionInDeclarationFiles.ts | 10 +++++++ 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/useBeforeDefinitionInDeclarationFiles.symbols create mode 100644 tests/baselines/reference/useBeforeDefinitionInDeclarationFiles.types create mode 100644 tests/cases/compiler/useBeforeDefinitionInDeclarationFiles.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 92d026cd3dc..7d3d037b2a6 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -20700,7 +20700,7 @@ namespace ts { function checkPropertyNotUsedBeforeDeclaration(prop: Symbol, node: PropertyAccessExpression | QualifiedName, right: Identifier): void { const { valueDeclaration } = prop; - if (!valueDeclaration) { + if (!valueDeclaration || getSourceFileOfNode(node).isDeclarationFile) { return; } diff --git a/tests/baselines/reference/useBeforeDefinitionInDeclarationFiles.symbols b/tests/baselines/reference/useBeforeDefinitionInDeclarationFiles.symbols new file mode 100644 index 00000000000..aafa653cf6a --- /dev/null +++ b/tests/baselines/reference/useBeforeDefinitionInDeclarationFiles.symbols @@ -0,0 +1,26 @@ +=== tests/cases/compiler/declaration.d.ts === +export declare class ClassWithSymbols { +>ClassWithSymbols : Symbol(ClassWithSymbols, Decl(declaration.d.ts, 0, 0)) + + public readonly [Namespace.locallyExportedCustomSymbol]: string; +>[Namespace.locallyExportedCustomSymbol] : Symbol(ClassWithSymbols[Namespace.locallyExportedCustomSymbol], Decl(declaration.d.ts, 0, 39)) +>Namespace.locallyExportedCustomSymbol : Symbol(Namespace.locallyExportedCustomSymbol, Decl(declaration.d.ts, 5, 14)) +>Namespace : Symbol(Namespace, Decl(declaration.d.ts, 3, 1)) +>locallyExportedCustomSymbol : Symbol(Namespace.locallyExportedCustomSymbol, Decl(declaration.d.ts, 5, 14)) + + public [Namespace.fullyExportedCustomSymbol](): void; +>[Namespace.fullyExportedCustomSymbol] : Symbol(ClassWithSymbols[Namespace.fullyExportedCustomSymbol], Decl(declaration.d.ts, 1, 66)) +>Namespace.fullyExportedCustomSymbol : Symbol(Namespace.fullyExportedCustomSymbol, Decl(declaration.d.ts, 6, 14)) +>Namespace : Symbol(Namespace, Decl(declaration.d.ts, 3, 1)) +>fullyExportedCustomSymbol : Symbol(Namespace.fullyExportedCustomSymbol, Decl(declaration.d.ts, 6, 14)) +} +export namespace Namespace { +>Namespace : Symbol(Namespace, Decl(declaration.d.ts, 3, 1)) + + export const locallyExportedCustomSymbol: unique symbol; +>locallyExportedCustomSymbol : Symbol(locallyExportedCustomSymbol, Decl(declaration.d.ts, 5, 14)) + + export const fullyExportedCustomSymbol: unique symbol; +>fullyExportedCustomSymbol : Symbol(fullyExportedCustomSymbol, Decl(declaration.d.ts, 6, 14)) +} + diff --git a/tests/baselines/reference/useBeforeDefinitionInDeclarationFiles.types b/tests/baselines/reference/useBeforeDefinitionInDeclarationFiles.types new file mode 100644 index 00000000000..34c79c36bfc --- /dev/null +++ b/tests/baselines/reference/useBeforeDefinitionInDeclarationFiles.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/declaration.d.ts === +export declare class ClassWithSymbols { +>ClassWithSymbols : ClassWithSymbols + + public readonly [Namespace.locallyExportedCustomSymbol]: string; +>[Namespace.locallyExportedCustomSymbol] : string +>Namespace.locallyExportedCustomSymbol : unique symbol +>Namespace : typeof Namespace +>locallyExportedCustomSymbol : unique symbol + + public [Namespace.fullyExportedCustomSymbol](): void; +>[Namespace.fullyExportedCustomSymbol] : () => void +>Namespace.fullyExportedCustomSymbol : unique symbol +>Namespace : typeof Namespace +>fullyExportedCustomSymbol : unique symbol +} +export namespace Namespace { +>Namespace : typeof Namespace + + export const locallyExportedCustomSymbol: unique symbol; +>locallyExportedCustomSymbol : unique symbol + + export const fullyExportedCustomSymbol: unique symbol; +>fullyExportedCustomSymbol : unique symbol +} + diff --git a/tests/cases/compiler/useBeforeDefinitionInDeclarationFiles.ts b/tests/cases/compiler/useBeforeDefinitionInDeclarationFiles.ts new file mode 100644 index 00000000000..e4ebb083830 --- /dev/null +++ b/tests/cases/compiler/useBeforeDefinitionInDeclarationFiles.ts @@ -0,0 +1,10 @@ +// @filename: declaration.d.ts + +export declare class ClassWithSymbols { + public readonly [Namespace.locallyExportedCustomSymbol]: string; + public [Namespace.fullyExportedCustomSymbol](): void; +} +export namespace Namespace { + export const locallyExportedCustomSymbol: unique symbol; + export const fullyExportedCustomSymbol: unique symbol; +}