mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-06 02:33:53 -06:00
Consider class field properties to redeclare parent definitions (#43194)
This commit is contained in:
parent
c34b252e1e
commit
57775ed405
@ -27119,7 +27119,7 @@ namespace ts {
|
||||
if (isInPropertyInitializer(node)
|
||||
&& !(isAccessExpression(node) && isAccessExpression(node.expression))
|
||||
&& !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)
|
||||
&& !isPropertyDeclaredInAncestorClass(prop)) {
|
||||
&& (compilerOptions.useDefineForClassFields || !isPropertyDeclaredInAncestorClass(prop))) {
|
||||
diagnosticMessage = error(right, Diagnostics.Property_0_is_used_before_its_initialization, declarationName);
|
||||
}
|
||||
else if (valueDeclaration.kind === SyntaxKind.ClassDeclaration &&
|
||||
|
||||
21
tests/baselines/reference/redeclaredProperty.errors.txt
Normal file
21
tests/baselines/reference/redeclaredProperty.errors.txt
Normal file
@ -0,0 +1,21 @@
|
||||
tests/cases/conformance/classes/propertyMemberDeclarations/redeclaredProperty.ts(7,12): error TS2729: Property 'b' is used before its initialization.
|
||||
|
||||
|
||||
==== tests/cases/conformance/classes/propertyMemberDeclarations/redeclaredProperty.ts (1 errors) ====
|
||||
class Base {
|
||||
b = 1;
|
||||
}
|
||||
|
||||
class Derived extends Base {
|
||||
b;
|
||||
d = this.b;
|
||||
~
|
||||
!!! error TS2729: Property 'b' is used before its initialization.
|
||||
!!! related TS2728 tests/cases/conformance/classes/propertyMemberDeclarations/redeclaredProperty.ts:6:3: 'b' is declared here.
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.b = 2;
|
||||
}
|
||||
}
|
||||
|
||||
28
tests/baselines/reference/redeclaredProperty.js
Normal file
28
tests/baselines/reference/redeclaredProperty.js
Normal file
@ -0,0 +1,28 @@
|
||||
//// [redeclaredProperty.ts]
|
||||
class Base {
|
||||
b = 1;
|
||||
}
|
||||
|
||||
class Derived extends Base {
|
||||
b;
|
||||
d = this.b;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.b = 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//// [redeclaredProperty.js]
|
||||
class Base {
|
||||
b = 1;
|
||||
}
|
||||
class Derived extends Base {
|
||||
b;
|
||||
d = this.b;
|
||||
constructor() {
|
||||
super();
|
||||
this.b = 2;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
tests/cases/conformance/classes/propertyMemberDeclarations/redefinedPararameterProperty.ts(6,14): error TS2729: Property 'a' is used before its initialization.
|
||||
|
||||
|
||||
==== tests/cases/conformance/classes/propertyMemberDeclarations/redefinedPararameterProperty.ts (1 errors) ====
|
||||
class Base {
|
||||
a = 1;
|
||||
}
|
||||
|
||||
class Derived extends Base {
|
||||
b = this.a /*undefined*/;
|
||||
~
|
||||
!!! error TS2729: Property 'a' is used before its initialization.
|
||||
!!! related TS2728 tests/cases/conformance/classes/propertyMemberDeclarations/redefinedPararameterProperty.ts:8:17: 'a' is declared here.
|
||||
|
||||
constructor(public a: number) {
|
||||
super();
|
||||
}
|
||||
}
|
||||
|
||||
26
tests/baselines/reference/redefinedPararameterProperty.js
Normal file
26
tests/baselines/reference/redefinedPararameterProperty.js
Normal file
@ -0,0 +1,26 @@
|
||||
//// [redefinedPararameterProperty.ts]
|
||||
class Base {
|
||||
a = 1;
|
||||
}
|
||||
|
||||
class Derived extends Base {
|
||||
b = this.a /*undefined*/;
|
||||
|
||||
constructor(public a: number) {
|
||||
super();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//// [redefinedPararameterProperty.js]
|
||||
class Base {
|
||||
a = 1;
|
||||
}
|
||||
class Derived extends Base {
|
||||
a;
|
||||
b = this.a /*undefined*/;
|
||||
constructor(a) {
|
||||
super();
|
||||
this.a = a;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
=== tests/cases/conformance/classes/propertyMemberDeclarations/redefinedPararameterProperty.ts ===
|
||||
|
||||
No type information for this code.
|
||||
@ -0,0 +1,3 @@
|
||||
=== tests/cases/conformance/classes/propertyMemberDeclarations/redefinedPararameterProperty.ts ===
|
||||
|
||||
No type information for this code.
|
||||
@ -0,0 +1,17 @@
|
||||
// @noTypesAndSymbols: true
|
||||
// @strictNullChecks: true
|
||||
// @target: esnext
|
||||
// @useDefineForClassFields: true
|
||||
class Base {
|
||||
b = 1;
|
||||
}
|
||||
|
||||
class Derived extends Base {
|
||||
b;
|
||||
d = this.b;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.b = 2;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
// @noTypesAndSymbols: true
|
||||
// @strictNullChecks: true
|
||||
// @target: esnext
|
||||
// @useDefineForClassFields: true
|
||||
class Base {
|
||||
a = 1;
|
||||
}
|
||||
|
||||
class Derived extends Base {
|
||||
b = this.a /*undefined*/;
|
||||
|
||||
constructor(public a: number) {
|
||||
super();
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user