From 9ad18f2330f58e8fd3f7b5eb583a70d598da2ed0 Mon Sep 17 00:00:00 2001 From: kingwl Date: Wed, 7 Apr 2021 17:07:58 +0800 Subject: [PATCH 1/4] ignore static member if checking override --- src/compiler/checker.ts | 4 ++ .../baselines/reference/override13.errors.txt | 20 ++++++++++ tests/baselines/reference/override13.js | 34 +++++++++++++++++ tests/baselines/reference/override13.symbols | 32 ++++++++++++++++ tests/baselines/reference/override13.types | 38 +++++++++++++++++++ .../cases/conformance/override/override13.ts | 17 +++++++++ 6 files changed, 145 insertions(+) create mode 100644 tests/baselines/reference/override13.errors.txt create mode 100644 tests/baselines/reference/override13.js create mode 100644 tests/baselines/reference/override13.symbols create mode 100644 tests/baselines/reference/override13.types create mode 100644 tests/cases/conformance/override/override13.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 2d5db22a565bf..e947b0f322f94 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -36946,6 +36946,10 @@ namespace ts { const baseWithThis = baseTypes?.length ? getTypeWithThisArgument(first(baseTypes), type.thisType) : undefined; for (const member of node.members) { + if (hasStaticModifier(member)) { + continue; + } + if (isConstructorDeclaration(member)) { forEach(member.parameters, param => { if (isParameterPropertyDeclaration(param, member)) { diff --git a/tests/baselines/reference/override13.errors.txt b/tests/baselines/reference/override13.errors.txt new file mode 100644 index 0000000000000..888e4c027baec --- /dev/null +++ b/tests/baselines/reference/override13.errors.txt @@ -0,0 +1,20 @@ +tests/cases/conformance/override/override13.ts(7,5): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'Foo'. + + +==== tests/cases/conformance/override/override13.ts (1 errors) ==== + class Foo { + property = 1 + static staticProperty = 2 + } + + class SubFoo extends Foo { + property = 42; + ~~~~~~~~ +!!! error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'Foo'. + staticProperty = 42; + } + + class StaticSubFoo extends Foo { + static property = 42; + static staticProperty = 42; + } \ No newline at end of file diff --git a/tests/baselines/reference/override13.js b/tests/baselines/reference/override13.js new file mode 100644 index 0000000000000..b80f8752f883e --- /dev/null +++ b/tests/baselines/reference/override13.js @@ -0,0 +1,34 @@ +//// [override13.ts] +class Foo { + property = 1 + static staticProperty = 2 +} + +class SubFoo extends Foo { + property = 42; + staticProperty = 42; +} + +class StaticSubFoo extends Foo { + static property = 42; + static staticProperty = 42; +} + +//// [override13.js] +class Foo { + constructor() { + this.property = 1; + } +} +Foo.staticProperty = 2; +class SubFoo extends Foo { + constructor() { + super(...arguments); + this.property = 42; + this.staticProperty = 42; + } +} +class StaticSubFoo extends Foo { +} +StaticSubFoo.property = 42; +StaticSubFoo.staticProperty = 42; diff --git a/tests/baselines/reference/override13.symbols b/tests/baselines/reference/override13.symbols new file mode 100644 index 0000000000000..1c4eb65e22020 --- /dev/null +++ b/tests/baselines/reference/override13.symbols @@ -0,0 +1,32 @@ +=== tests/cases/conformance/override/override13.ts === +class Foo { +>Foo : Symbol(Foo, Decl(override13.ts, 0, 0)) + + property = 1 +>property : Symbol(Foo.property, Decl(override13.ts, 0, 11)) + + static staticProperty = 2 +>staticProperty : Symbol(Foo.staticProperty, Decl(override13.ts, 1, 16)) +} + +class SubFoo extends Foo { +>SubFoo : Symbol(SubFoo, Decl(override13.ts, 3, 1)) +>Foo : Symbol(Foo, Decl(override13.ts, 0, 0)) + + property = 42; +>property : Symbol(SubFoo.property, Decl(override13.ts, 5, 26)) + + staticProperty = 42; +>staticProperty : Symbol(SubFoo.staticProperty, Decl(override13.ts, 6, 18)) +} + +class StaticSubFoo extends Foo { +>StaticSubFoo : Symbol(StaticSubFoo, Decl(override13.ts, 8, 1)) +>Foo : Symbol(Foo, Decl(override13.ts, 0, 0)) + + static property = 42; +>property : Symbol(StaticSubFoo.property, Decl(override13.ts, 10, 32)) + + static staticProperty = 42; +>staticProperty : Symbol(StaticSubFoo.staticProperty, Decl(override13.ts, 11, 25)) +} diff --git a/tests/baselines/reference/override13.types b/tests/baselines/reference/override13.types new file mode 100644 index 0000000000000..748cbe3d61435 --- /dev/null +++ b/tests/baselines/reference/override13.types @@ -0,0 +1,38 @@ +=== tests/cases/conformance/override/override13.ts === +class Foo { +>Foo : Foo + + property = 1 +>property : number +>1 : 1 + + static staticProperty = 2 +>staticProperty : number +>2 : 2 +} + +class SubFoo extends Foo { +>SubFoo : SubFoo +>Foo : Foo + + property = 42; +>property : number +>42 : 42 + + staticProperty = 42; +>staticProperty : number +>42 : 42 +} + +class StaticSubFoo extends Foo { +>StaticSubFoo : StaticSubFoo +>Foo : Foo + + static property = 42; +>property : number +>42 : 42 + + static staticProperty = 42; +>staticProperty : number +>42 : 42 +} diff --git a/tests/cases/conformance/override/override13.ts b/tests/cases/conformance/override/override13.ts new file mode 100644 index 0000000000000..c9dedf1ad5f2c --- /dev/null +++ b/tests/cases/conformance/override/override13.ts @@ -0,0 +1,17 @@ +// @noImplicitOverride: true +// @target: esnext + +class Foo { + property = 1 + static staticProperty = 2 +} + +class SubFoo extends Foo { + property = 42; + staticProperty = 42; +} + +class StaticSubFoo extends Foo { + static property = 42; + static staticProperty = 42; +} \ No newline at end of file From 78d7b339d8951f720a1385e26d9d13e19a5d463a Mon Sep 17 00:00:00 2001 From: kingwl Date: Wed, 7 Apr 2021 17:14:08 +0800 Subject: [PATCH 2/4] Ignore declared member when check override --- src/compiler/checker.ts | 2 +- tests/baselines/reference/override14.js | 18 ++++++++++++++++++ tests/baselines/reference/override14.symbols | 16 ++++++++++++++++ tests/baselines/reference/override14.types | 17 +++++++++++++++++ tests/baselines/reference/override5.errors.txt | 5 +---- tests/cases/conformance/override/override14.ts | 10 ++++++++++ 6 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 tests/baselines/reference/override14.js create mode 100644 tests/baselines/reference/override14.symbols create mode 100644 tests/baselines/reference/override14.types create mode 100644 tests/cases/conformance/override/override14.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index e947b0f322f94..972bb1bf538be 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -36946,7 +36946,7 @@ namespace ts { const baseWithThis = baseTypes?.length ? getTypeWithThisArgument(first(baseTypes), type.thisType) : undefined; for (const member of node.members) { - if (hasStaticModifier(member)) { + if (hasStaticModifier(member) || hasAmbientModifier(member)) { continue; } diff --git a/tests/baselines/reference/override14.js b/tests/baselines/reference/override14.js new file mode 100644 index 0000000000000..8679fc3a9667f --- /dev/null +++ b/tests/baselines/reference/override14.js @@ -0,0 +1,18 @@ +//// [override14.ts] +class Foo { + property = 1 +} + +class SubFoo extends Foo { + declare property: number +} + + +//// [override14.js] +class Foo { + constructor() { + this.property = 1; + } +} +class SubFoo extends Foo { +} diff --git a/tests/baselines/reference/override14.symbols b/tests/baselines/reference/override14.symbols new file mode 100644 index 0000000000000..483f1997c49f3 --- /dev/null +++ b/tests/baselines/reference/override14.symbols @@ -0,0 +1,16 @@ +=== tests/cases/conformance/override/override14.ts === +class Foo { +>Foo : Symbol(Foo, Decl(override14.ts, 0, 0)) + + property = 1 +>property : Symbol(Foo.property, Decl(override14.ts, 0, 11)) +} + +class SubFoo extends Foo { +>SubFoo : Symbol(SubFoo, Decl(override14.ts, 2, 1)) +>Foo : Symbol(Foo, Decl(override14.ts, 0, 0)) + + declare property: number +>property : Symbol(SubFoo.property, Decl(override14.ts, 4, 26)) +} + diff --git a/tests/baselines/reference/override14.types b/tests/baselines/reference/override14.types new file mode 100644 index 0000000000000..d566a28db2635 --- /dev/null +++ b/tests/baselines/reference/override14.types @@ -0,0 +1,17 @@ +=== tests/cases/conformance/override/override14.ts === +class Foo { +>Foo : Foo + + property = 1 +>property : number +>1 : 1 +} + +class SubFoo extends Foo { +>SubFoo : SubFoo +>Foo : Foo + + declare property: number +>property : number +} + diff --git a/tests/baselines/reference/override5.errors.txt b/tests/baselines/reference/override5.errors.txt index 6c9c93aa1986c..61f7df0cdeeab 100644 --- a/tests/baselines/reference/override5.errors.txt +++ b/tests/baselines/reference/override5.errors.txt @@ -1,4 +1,3 @@ -tests/cases/conformance/override/override5.ts(12,13): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'B'. tests/cases/conformance/override/override5.ts(14,14): error TS1040: 'override' modifier cannot be used in an ambient context. tests/cases/conformance/override/override5.ts(16,14): error TS1029: 'override' modifier must precede 'readonly' modifier. tests/cases/conformance/override/override5.ts(20,14): error TS1243: 'static' modifier cannot be used with 'override' modifier. @@ -9,7 +8,7 @@ tests/cases/conformance/override/override5.ts(44,23): error TS4112: This member tests/cases/conformance/override/override5.ts(45,23): error TS4112: This member cannot have an 'override' modifier because its containing class 'AND' does not extend another class. -==== tests/cases/conformance/override/override5.ts (9 errors) ==== +==== tests/cases/conformance/override/override5.ts (8 errors) ==== class B { p1: number = 1; p2: number = 2; @@ -22,8 +21,6 @@ tests/cases/conformance/override/override5.ts(45,23): error TS4112: This member class D extends B{ declare p1: number - ~~ -!!! error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'B'. override declare p2: number; ~~~~~~~ diff --git a/tests/cases/conformance/override/override14.ts b/tests/cases/conformance/override/override14.ts new file mode 100644 index 0000000000000..8fe638ba745d4 --- /dev/null +++ b/tests/cases/conformance/override/override14.ts @@ -0,0 +1,10 @@ +// @noImplicitOverride: true +// @target: esnext + +class Foo { + property = 1 +} + +class SubFoo extends Foo { + declare property: number +} From 5992394c7119626bacf2c4e0b21de0a57702881d Mon Sep 17 00:00:00 2001 From: kingwl Date: Thu, 8 Apr 2021 13:32:27 +0800 Subject: [PATCH 3/4] Check static override too --- src/compiler/checker.ts | 22 +++++++++---------- .../baselines/reference/override13.errors.txt | 5 ++++- .../baselines/reference/override5.errors.txt | 6 ++--- .../baselines/reference/override7.errors.txt | 6 ++--- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 972bb1bf538be..ece4831ebeaf6 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -36902,7 +36902,7 @@ namespace ts { } } - checkMembersForMissingOverrideModifier(node, type, typeWithThis); + checkMembersForMissingOverrideModifier(node, type, typeWithThis, staticType); const implementedTypeNodes = getEffectiveImplementsTypeNodes(node); if (implementedTypeNodes) { @@ -36939,14 +36939,15 @@ namespace ts { } } - function checkMembersForMissingOverrideModifier(node: ClassLikeDeclaration, type: InterfaceType, typeWithThis: Type) { + function checkMembersForMissingOverrideModifier(node: ClassLikeDeclaration, type: InterfaceType, typeWithThis: Type, staticType: ObjectType) { const nodeInAmbientContext = !!(node.flags & NodeFlags.Ambient); const baseTypeNode = getEffectiveBaseTypeNode(node); const baseTypes = baseTypeNode && getBaseTypes(type); const baseWithThis = baseTypes?.length ? getTypeWithThisArgument(first(baseTypes), type.thisType) : undefined; + const baseStaticType = getBaseConstructorTypeOfClass(type); for (const member of node.members) { - if (hasStaticModifier(member) || hasAmbientModifier(member)) { + if (hasAmbientModifier(member)) { continue; } @@ -36959,17 +36960,22 @@ namespace ts { } checkClassMember(member); } + function checkClassMember(member: ClassElement | ParameterPropertyDeclaration, memberIsParameterProperty?: boolean) { const hasOverride = hasOverrideModifier(member); + const hasStatic = hasStaticModifier(member); if (baseWithThis && (hasOverride || compilerOptions.noImplicitOverride)) { const declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member); if (!declaredProp) { return; } + const thisType = hasStatic ? staticType : typeWithThis; + const baseType = hasStatic ? baseStaticType : baseWithThis; + const prop = getPropertyOfType(thisType, declaredProp.escapedName); + const baseProp = getPropertyOfType(baseType, declaredProp.escapedName); + const baseClassName = typeToString(baseWithThis); - const prop = getPropertyOfType(typeWithThis, declaredProp.escapedName); - const baseProp = getPropertyOfType(baseWithThis, declaredProp.escapedName); if (prop && !baseProp && hasOverride) { error(member, Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0, baseClassName); } @@ -40403,9 +40409,6 @@ namespace ts { else if (flags & ModifierFlags.Ambient) { return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "override", "declare"); } - else if (flags & ModifierFlags.Static) { - return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "static", "override"); - } else if (flags & ModifierFlags.Readonly) { return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "override", "readonly"); } @@ -40460,9 +40463,6 @@ namespace ts { else if (flags & ModifierFlags.Readonly) { return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "static", "readonly"); } - else if (flags & ModifierFlags.Override) { - return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "static", "override"); - } else if (flags & ModifierFlags.Async) { return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "static", "async"); } diff --git a/tests/baselines/reference/override13.errors.txt b/tests/baselines/reference/override13.errors.txt index 888e4c027baec..2b8435429c866 100644 --- a/tests/baselines/reference/override13.errors.txt +++ b/tests/baselines/reference/override13.errors.txt @@ -1,7 +1,8 @@ tests/cases/conformance/override/override13.ts(7,5): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'Foo'. +tests/cases/conformance/override/override13.ts(13,12): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'Foo'. -==== tests/cases/conformance/override/override13.ts (1 errors) ==== +==== tests/cases/conformance/override/override13.ts (2 errors) ==== class Foo { property = 1 static staticProperty = 2 @@ -17,4 +18,6 @@ tests/cases/conformance/override/override13.ts(7,5): error TS4114: This member m class StaticSubFoo extends Foo { static property = 42; static staticProperty = 42; + ~~~~~~~~~~~~~~ +!!! error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'Foo'. } \ No newline at end of file diff --git a/tests/baselines/reference/override5.errors.txt b/tests/baselines/reference/override5.errors.txt index 61f7df0cdeeab..e0dd689d47e39 100644 --- a/tests/baselines/reference/override5.errors.txt +++ b/tests/baselines/reference/override5.errors.txt @@ -1,6 +1,6 @@ tests/cases/conformance/override/override5.ts(14,14): error TS1040: 'override' modifier cannot be used in an ambient context. tests/cases/conformance/override/override5.ts(16,14): error TS1029: 'override' modifier must precede 'readonly' modifier. -tests/cases/conformance/override/override5.ts(20,14): error TS1243: 'static' modifier cannot be used with 'override' modifier. +tests/cases/conformance/override/override5.ts(20,21): error TS4113: This member cannot have an 'override' modifier because it is not declared in the base class 'B'. tests/cases/conformance/override/override5.ts(22,14): error TS1030: 'override' modifier already seen. tests/cases/conformance/override/override5.ts(25,14): error TS1029: 'public' modifier must precede 'override' modifier. tests/cases/conformance/override/override5.ts(27,5): error TS1089: 'override' modifier cannot appear on a constructor declaration. @@ -33,8 +33,8 @@ tests/cases/conformance/override/override5.ts(45,23): error TS4112: This member override readonly p4: number; override static sp: number; - ~~~~~~ -!!! error TS1243: 'static' modifier cannot be used with 'override' modifier. + ~~ +!!! error TS4113: This member cannot have an 'override' modifier because it is not declared in the base class 'B'. override override oop: number; ~~~~~~~~ diff --git a/tests/baselines/reference/override7.errors.txt b/tests/baselines/reference/override7.errors.txt index dec798252a28a..e5d908c99920c 100644 --- a/tests/baselines/reference/override7.errors.txt +++ b/tests/baselines/reference/override7.errors.txt @@ -1,6 +1,6 @@ tests/cases/conformance/override/override7.ts(11,14): error TS1040: 'override' modifier cannot be used in an ambient context. tests/cases/conformance/override/override7.ts(13,14): error TS1029: 'override' modifier must precede 'readonly' modifier. -tests/cases/conformance/override/override7.ts(17,14): error TS1243: 'static' modifier cannot be used with 'override' modifier. +tests/cases/conformance/override/override7.ts(17,21): error TS4113: This member cannot have an 'override' modifier because it is not declared in the base class 'B'. tests/cases/conformance/override/override7.ts(19,14): error TS1030: 'override' modifier already seen. tests/cases/conformance/override/override7.ts(19,23): error TS4113: This member cannot have an 'override' modifier because it is not declared in the base class 'B'. tests/cases/conformance/override/override7.ts(21,21): error TS4113: This member cannot have an 'override' modifier because it is not declared in the base class 'B'. @@ -33,8 +33,8 @@ tests/cases/conformance/override/override7.ts(42,23): error TS4112: This member override readonly p4: number; override static sp: number; - ~~~~~~ -!!! error TS1243: 'static' modifier cannot be used with 'override' modifier. + ~~ +!!! error TS4113: This member cannot have an 'override' modifier because it is not declared in the base class 'B'. override override oop: number; ~~~~~~~~ From 9453f6881a4c7cd0530aeab942dabb51d9d3af5f Mon Sep 17 00:00:00 2001 From: kingwl Date: Fri, 9 Apr 2021 11:18:07 +0800 Subject: [PATCH 4/4] Add more tests --- .../baselines/reference/override13.errors.txt | 20 +++++++++- tests/baselines/reference/override13.js | 39 +++++++++++++------ tests/baselines/reference/override13.symbols | 26 +++++++++++++ tests/baselines/reference/override13.types | 30 ++++++++++++++ tests/baselines/reference/override14.js | 4 +- .../cases/conformance/override/override13.ts | 12 ++++++ 6 files changed, 116 insertions(+), 15 deletions(-) diff --git a/tests/baselines/reference/override13.errors.txt b/tests/baselines/reference/override13.errors.txt index 2b8435429c866..3cc182018cdeb 100644 --- a/tests/baselines/reference/override13.errors.txt +++ b/tests/baselines/reference/override13.errors.txt @@ -1,8 +1,10 @@ tests/cases/conformance/override/override13.ts(7,5): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'Foo'. tests/cases/conformance/override/override13.ts(13,12): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'Foo'. +tests/cases/conformance/override/override13.ts(19,5): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'Intermediate'. +tests/cases/conformance/override/override13.ts(25,12): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'Intermediate'. -==== tests/cases/conformance/override/override13.ts (2 errors) ==== +==== tests/cases/conformance/override/override13.ts (4 errors) ==== class Foo { property = 1 static staticProperty = 2 @@ -20,4 +22,20 @@ tests/cases/conformance/override/override13.ts(13,12): error TS4114: This member static staticProperty = 42; ~~~~~~~~~~~~~~ !!! error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'Foo'. + } + + class Intermediate extends Foo {} + + class Derived extends Intermediate { + property = 42; + ~~~~~~~~ +!!! error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'Intermediate'. + staticProperty = 42; + } + + class StaticDerived extends Intermediate { + static property = 42; + static staticProperty = 42; + ~~~~~~~~~~~~~~ +!!! error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'Intermediate'. } \ No newline at end of file diff --git a/tests/baselines/reference/override13.js b/tests/baselines/reference/override13.js index b80f8752f883e..96864a74142e1 100644 --- a/tests/baselines/reference/override13.js +++ b/tests/baselines/reference/override13.js @@ -12,23 +12,40 @@ class SubFoo extends Foo { class StaticSubFoo extends Foo { static property = 42; static staticProperty = 42; +} + +class Intermediate extends Foo {} + +class Derived extends Intermediate { + property = 42; + staticProperty = 42; +} + +class StaticDerived extends Intermediate { + static property = 42; + static staticProperty = 42; } //// [override13.js] class Foo { - constructor() { - this.property = 1; - } + property = 1; + static staticProperty = 2; } -Foo.staticProperty = 2; class SubFoo extends Foo { - constructor() { - super(...arguments); - this.property = 42; - this.staticProperty = 42; - } + property = 42; + staticProperty = 42; } class StaticSubFoo extends Foo { + static property = 42; + static staticProperty = 42; +} +class Intermediate extends Foo { +} +class Derived extends Intermediate { + property = 42; + staticProperty = 42; +} +class StaticDerived extends Intermediate { + static property = 42; + static staticProperty = 42; } -StaticSubFoo.property = 42; -StaticSubFoo.staticProperty = 42; diff --git a/tests/baselines/reference/override13.symbols b/tests/baselines/reference/override13.symbols index 1c4eb65e22020..70a377a2b8bee 100644 --- a/tests/baselines/reference/override13.symbols +++ b/tests/baselines/reference/override13.symbols @@ -30,3 +30,29 @@ class StaticSubFoo extends Foo { static staticProperty = 42; >staticProperty : Symbol(StaticSubFoo.staticProperty, Decl(override13.ts, 11, 25)) } + +class Intermediate extends Foo {} +>Intermediate : Symbol(Intermediate, Decl(override13.ts, 13, 1)) +>Foo : Symbol(Foo, Decl(override13.ts, 0, 0)) + +class Derived extends Intermediate { +>Derived : Symbol(Derived, Decl(override13.ts, 15, 33)) +>Intermediate : Symbol(Intermediate, Decl(override13.ts, 13, 1)) + + property = 42; +>property : Symbol(Derived.property, Decl(override13.ts, 17, 36)) + + staticProperty = 42; +>staticProperty : Symbol(Derived.staticProperty, Decl(override13.ts, 18, 18)) +} + +class StaticDerived extends Intermediate { +>StaticDerived : Symbol(StaticDerived, Decl(override13.ts, 20, 1)) +>Intermediate : Symbol(Intermediate, Decl(override13.ts, 13, 1)) + + static property = 42; +>property : Symbol(StaticDerived.property, Decl(override13.ts, 22, 42)) + + static staticProperty = 42; +>staticProperty : Symbol(StaticDerived.staticProperty, Decl(override13.ts, 23, 25)) +} diff --git a/tests/baselines/reference/override13.types b/tests/baselines/reference/override13.types index 748cbe3d61435..44b59c3f4ae39 100644 --- a/tests/baselines/reference/override13.types +++ b/tests/baselines/reference/override13.types @@ -36,3 +36,33 @@ class StaticSubFoo extends Foo { >staticProperty : number >42 : 42 } + +class Intermediate extends Foo {} +>Intermediate : Intermediate +>Foo : Foo + +class Derived extends Intermediate { +>Derived : Derived +>Intermediate : Intermediate + + property = 42; +>property : number +>42 : 42 + + staticProperty = 42; +>staticProperty : number +>42 : 42 +} + +class StaticDerived extends Intermediate { +>StaticDerived : StaticDerived +>Intermediate : Intermediate + + static property = 42; +>property : number +>42 : 42 + + static staticProperty = 42; +>staticProperty : number +>42 : 42 +} diff --git a/tests/baselines/reference/override14.js b/tests/baselines/reference/override14.js index 8679fc3a9667f..df69367bc5c7e 100644 --- a/tests/baselines/reference/override14.js +++ b/tests/baselines/reference/override14.js @@ -10,9 +10,7 @@ class SubFoo extends Foo { //// [override14.js] class Foo { - constructor() { - this.property = 1; - } + property = 1; } class SubFoo extends Foo { } diff --git a/tests/cases/conformance/override/override13.ts b/tests/cases/conformance/override/override13.ts index c9dedf1ad5f2c..855df36af4a6e 100644 --- a/tests/cases/conformance/override/override13.ts +++ b/tests/cases/conformance/override/override13.ts @@ -14,4 +14,16 @@ class SubFoo extends Foo { class StaticSubFoo extends Foo { static property = 42; static staticProperty = 42; +} + +class Intermediate extends Foo {} + +class Derived extends Intermediate { + property = 42; + staticProperty = 42; +} + +class StaticDerived extends Intermediate { + static property = 42; + static staticProperty = 42; } \ No newline at end of file