Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions src/compiler/checker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37702,6 +37702,7 @@ namespace ts {
function checkClassMember(member: ClassElement | ParameterPropertyDeclaration, memberIsParameterProperty?: boolean) {
const hasOverride = hasOverrideModifier(member);
const hasStatic = isStatic(member);
const isJs = isInJSFile(member);
if (baseWithThis && (hasOverride || compilerOptions.noImplicitOverride)) {
const declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member);
if (!declaredProp) {
Expand All @@ -37727,9 +37728,17 @@ namespace ts {
}

if (!baseHasAbstract) {
const diag = memberIsParameterProperty ?
Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0 :
Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0;
let diag: DiagnosticMessage;
if (isJs) {
diag = memberIsParameterProperty ?
Diagnostics.This_parameter_property_must_have_a_leading_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0 :
Diagnostics.This_member_must_have_a_leading_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0;
}
else {
diag = memberIsParameterProperty ?
Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0 :
Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0;
}
error(member, diag, baseClassName);
}
else if (hasAbstractModifier(member) && baseHasAbstract) {
Expand Down
8 changes: 8 additions & 0 deletions src/compiler/diagnosticMessages.json
Original file line number Diff line number Diff line change
Expand Up @@ -3817,6 +3817,14 @@
"category": "Error",
"code": 4118
},
"This member must have a leading JSDoc comment with an '@override' tag because it overrides a member in the base class '{0}'.": {
"category": "Error",
"code": 4119
},
"This parameter property must have a leading JSDoc comment with an '@override' tag because it overrides a member in the base class '{0}'.": {
"category": "Error",
"code": 4120
},

"The current host does not support the '{0}' option.": {
"category": "Error",
Expand Down
4 changes: 2 additions & 2 deletions tests/baselines/reference/jsdocOverrideTag1.errors.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
tests/cases/conformance/jsdoc/0.js(27,5): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'A'.
tests/cases/conformance/jsdoc/0.js(27,5): error TS4119: This member must have a leading JSDoc comment with an '@override' tag because it overrides a member in the base class 'A'.
tests/cases/conformance/jsdoc/0.js(32,5): error TS4113: This member cannot have an 'override' modifier because it is not declared in the base class 'A'.
tests/cases/conformance/jsdoc/0.js(40,5): error TS4112: This member cannot have an 'override' modifier because its containing class 'C' does not extend another class.

Expand Down Expand Up @@ -32,7 +32,7 @@ tests/cases/conformance/jsdoc/0.js(40,5): error TS4112: This member cannot have

bar () {
~~~
!!! error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'A'.
!!! error TS4119: This member must have a leading JSDoc comment with an '@override' tag because it overrides a member in the base class 'A'.

}

Expand Down
4 changes: 2 additions & 2 deletions tests/baselines/reference/override_js2.errors.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
tests/cases/conformance/override/a.js(7,5): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'B'.
tests/cases/conformance/override/a.js(7,5): error TS4119: This member must have a leading JSDoc comment with an '@override' tag because it overrides a member in the base class 'B'.
tests/cases/conformance/override/a.js(11,5): error TS4113: This member cannot have an 'override' modifier because it is not declared in the base class 'B'.
tests/cases/conformance/override/a.js(17,5): error TS4112: This member cannot have an 'override' modifier because its containing class 'C' does not extend another class.
tests/cases/conformance/override/a.js(19,5): error TS4112: This member cannot have an 'override' modifier because its containing class 'C' does not extend another class.
Expand All @@ -13,7 +13,7 @@ tests/cases/conformance/override/a.js(19,5): error TS4112: This member cannot ha
class D extends B {
foo (v) {}
~~~
!!! error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'B'.
!!! error TS4119: This member must have a leading JSDoc comment with an '@override' tag because it overrides a member in the base class 'B'.
/** @override */
fooo (v) {}
/** @override */
Expand Down