mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-30 22:32:33 -05:00
Allow exporting a binding before its declaration
This commit is contained in:
@@ -742,6 +742,13 @@ namespace ts {
|
||||
// declaration is after usage, but it can still be legal if usage is deferred:
|
||||
// 1. inside a function
|
||||
// 2. inside an instance property initializer, a reference to a non-instance property
|
||||
// 3. inside an export specifier
|
||||
|
||||
if (usage.parent.kind === SyntaxKind.ExportSpecifier) {
|
||||
// export specifiers do not use the variable, they only make it available for use
|
||||
return true;
|
||||
}
|
||||
|
||||
const container = getEnclosingBlockScopeContainer(declaration);
|
||||
const isInstanceProperty = declaration.kind === SyntaxKind.PropertyDeclaration && !(getModifierFlags(declaration) & ModifierFlags.Static);
|
||||
return isUsedInFunctionOrInstanceProperty(usage, isInstanceProperty, container);
|
||||
|
||||
19
tests/baselines/reference/exportBinding.js
Normal file
19
tests/baselines/reference/exportBinding.js
Normal file
@@ -0,0 +1,19 @@
|
||||
//// [exportBinding.ts]
|
||||
export { x }
|
||||
const x = 'x'
|
||||
|
||||
export { Y as Z }
|
||||
class Y {}
|
||||
|
||||
|
||||
//// [exportBinding.js]
|
||||
"use strict";
|
||||
exports.__esModule = true;
|
||||
var x = 'x';
|
||||
exports.x = x;
|
||||
var Y = (function () {
|
||||
function Y() {
|
||||
}
|
||||
return Y;
|
||||
}());
|
||||
exports.Z = Y;
|
||||
14
tests/baselines/reference/exportBinding.symbols
Normal file
14
tests/baselines/reference/exportBinding.symbols
Normal file
@@ -0,0 +1,14 @@
|
||||
=== tests/cases/conformance/es6/modules/exportBinding.ts ===
|
||||
export { x }
|
||||
>x : Symbol(x, Decl(exportBinding.ts, 0, 8))
|
||||
|
||||
const x = 'x'
|
||||
>x : Symbol(x, Decl(exportBinding.ts, 1, 5))
|
||||
|
||||
export { Y as Z }
|
||||
>Y : Symbol(Z, Decl(exportBinding.ts, 3, 8))
|
||||
>Z : Symbol(Z, Decl(exportBinding.ts, 3, 8))
|
||||
|
||||
class Y {}
|
||||
>Y : Symbol(Y, Decl(exportBinding.ts, 3, 17))
|
||||
|
||||
15
tests/baselines/reference/exportBinding.types
Normal file
15
tests/baselines/reference/exportBinding.types
Normal file
@@ -0,0 +1,15 @@
|
||||
=== tests/cases/conformance/es6/modules/exportBinding.ts ===
|
||||
export { x }
|
||||
>x : "x"
|
||||
|
||||
const x = 'x'
|
||||
>x : "x"
|
||||
>'x' : "x"
|
||||
|
||||
export { Y as Z }
|
||||
>Y : typeof Y
|
||||
>Z : typeof Y
|
||||
|
||||
class Y {}
|
||||
>Y : Y
|
||||
|
||||
5
tests/cases/conformance/es6/modules/exportBinding.ts
Normal file
5
tests/cases/conformance/es6/modules/exportBinding.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
export { x }
|
||||
const x = 'x'
|
||||
|
||||
export { Y as Z }
|
||||
class Y {}
|
||||
Reference in New Issue
Block a user