mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 12:19:15 +00:00
fix(isolated_declarations): namespaces that are default exported should be considered for expando functions (#4935)
This should be ok but currently has an error reported
```ts
function foo(): void {}
namespace foo {
export let bar = 42;
}
foo.bar = 42;
export default foo;
```
Co-authored-by: MichaelMitchell-at <=>
Co-authored-by: Dunqing <dengqing0821@gmail.com>
Co-authored-by: Don Isaac <donald.isaac@gmail.com>
This commit is contained in:
parent
7859f58b4e
commit
185eb206a8
3 changed files with 32 additions and 12 deletions
|
|
@ -425,8 +425,18 @@ impl<'a> IsolatedDeclarations<'a> {
|
|||
) -> FxHashMap<&'a str, FxHashSet<Atom>> {
|
||||
let mut assignable_properties_for_namespace = FxHashMap::<&str, FxHashSet<Atom>>::default();
|
||||
for stmt in stmts {
|
||||
let Statement::ExportNamedDeclaration(decl) = stmt else { continue };
|
||||
let Some(Declaration::TSModuleDeclaration(decl)) = &decl.declaration else { continue };
|
||||
let decl = match stmt {
|
||||
Statement::ExportNamedDeclaration(decl) => {
|
||||
if let Some(Declaration::TSModuleDeclaration(decl)) = &decl.declaration {
|
||||
decl
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
Statement::TSModuleDeclaration(decl) => decl,
|
||||
_ => continue,
|
||||
};
|
||||
|
||||
if decl.kind != TSModuleDeclarationKind::Namespace {
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,14 +16,19 @@ export namespace foo {
|
|||
export let baz = 100;
|
||||
}
|
||||
|
||||
// namespace must be exported
|
||||
namespace foo {
|
||||
export let bar = 42;
|
||||
}
|
||||
|
||||
foo.bar = 42;
|
||||
foo.baz = 100;
|
||||
|
||||
// unexported
|
||||
const zoo = (): void => {}
|
||||
zoo.toString = () => {}
|
||||
zoo.toString = () => {}
|
||||
|
||||
function qux(): void {}
|
||||
|
||||
namespace qux {
|
||||
export let woo = 42;
|
||||
}
|
||||
|
||||
qux.woo = 42;
|
||||
|
||||
export default qux;
|
||||
|
|
@ -12,6 +12,11 @@ export declare namespace NS {
|
|||
export declare namespace foo {
|
||||
export let baz: number;
|
||||
}
|
||||
declare function qux(): void;
|
||||
declare namespace qux {
|
||||
export let woo: number;
|
||||
}
|
||||
export default qux;
|
||||
|
||||
|
||||
==================== Errors ====================
|
||||
|
|
@ -49,9 +54,9 @@ export declare namespace foo {
|
|||
x TS9023: Assigning properties to functions without declaring them is not
|
||||
| supported with --isolatedDeclarations. Add an explicit declaration for the
|
||||
| properties assigned to this function.
|
||||
,-[24:1]
|
||||
23 |
|
||||
24 | foo.bar = 42;
|
||||
,-[19:1]
|
||||
18 |
|
||||
19 | foo.bar = 42;
|
||||
: ^^^^^^^
|
||||
25 | foo.baz = 100;
|
||||
20 | foo.baz = 100;
|
||||
`----
|
||||
|
|
|
|||
Loading…
Reference in a new issue