Allow exporting a binding before its declaration
This commit is contained in:
parent
595342615b
commit
61ebcb49c7
|
@ -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 {}
|
Loading…
Reference in a new issue