diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 33abcb2af1..7b85189b78 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -16227,7 +16227,7 @@ namespace ts { checkTypeAssignableTo(staticType, getTypeWithoutSignatures(staticBaseType), node.name || node, Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1); - if (baseType.symbol.valueDeclaration && !(baseType.symbol.valueDeclaration.flags & NodeFlags.Ambient)) { + if (baseType.symbol.valueDeclaration && !isInAmbientContext(baseType.symbol.valueDeclaration)) { if (!isBlockScopedNameDeclaredBeforeUse(baseType.symbol.valueDeclaration, node)) { error(baseTypeNode, Diagnostics.A_class_must_be_declared_after_its_base_class); } diff --git a/tests/baselines/reference/ambientClassDeclaredBeforeBase.symbols b/tests/baselines/reference/ambientClassDeclaredBeforeBase.symbols new file mode 100644 index 0000000000..0d9fed7724 --- /dev/null +++ b/tests/baselines/reference/ambientClassDeclaredBeforeBase.symbols @@ -0,0 +1,13 @@ +=== tests/cases/compiler/a.d.ts === + +declare namespace ns { +>ns : Symbol(ns, Decl(a.d.ts, 0, 0)) + + class SecondNS extends FirstNS { } +>SecondNS : Symbol(SecondNS, Decl(a.d.ts, 1, 22)) +>FirstNS : Symbol(FirstNS, Decl(a.d.ts, 2, 36)) + + class FirstNS { } +>FirstNS : Symbol(FirstNS, Decl(a.d.ts, 2, 36)) +} + diff --git a/tests/baselines/reference/ambientClassDeclaredBeforeBase.types b/tests/baselines/reference/ambientClassDeclaredBeforeBase.types new file mode 100644 index 0000000000..554d3cfcce --- /dev/null +++ b/tests/baselines/reference/ambientClassDeclaredBeforeBase.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/a.d.ts === + +declare namespace ns { +>ns : typeof ns + + class SecondNS extends FirstNS { } +>SecondNS : SecondNS +>FirstNS : FirstNS + + class FirstNS { } +>FirstNS : FirstNS +} + diff --git a/tests/cases/compiler/ambientClassDeclaredBeforeBase.ts b/tests/cases/compiler/ambientClassDeclaredBeforeBase.ts new file mode 100644 index 0000000000..7e564c9d37 --- /dev/null +++ b/tests/cases/compiler/ambientClassDeclaredBeforeBase.ts @@ -0,0 +1,6 @@ +// @filename: a.d.ts + +declare namespace ns { + class SecondNS extends FirstNS { } + class FirstNS { } +}