mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-06 02:13:31 -06:00
fix(48031): show circularity error for self referential get accessor annotations (#48050)
This commit is contained in:
parent
e7426251b0
commit
f4d76e5b93
@ -9628,13 +9628,17 @@ namespace ts {
|
||||
}
|
||||
|
||||
let type = resolveTypeOfAccessors(symbol, writing);
|
||||
|
||||
if (!popTypeResolution()) {
|
||||
type = anyType;
|
||||
if (noImplicitAny) {
|
||||
const getter = getDeclarationOfKind<AccessorDeclaration>(symbol, SyntaxKind.GetAccessor);
|
||||
error(getter, Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, symbolToString(symbol));
|
||||
const getter = getDeclarationOfKind<AccessorDeclaration>(symbol, SyntaxKind.GetAccessor);
|
||||
if (getter) {
|
||||
if (getEffectiveTypeAnnotationNode(getter)) {
|
||||
error(getter.name, Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation, symbolToString(symbol));
|
||||
}
|
||||
else if (noImplicitAny) {
|
||||
error(getter, Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, symbolToString(symbol));
|
||||
}
|
||||
}
|
||||
type = anyType;
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
tests/cases/compiler/circularGetAccessor.ts(2,9): error TS2502: 'foo' is referenced directly or indirectly in its own type annotation.
|
||||
|
||||
|
||||
==== tests/cases/compiler/circularGetAccessor.ts (1 errors) ====
|
||||
declare class C {
|
||||
get foo(): typeof this.foo;
|
||||
~~~
|
||||
!!! error TS2502: 'foo' is referenced directly or indirectly in its own type annotation.
|
||||
}
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
//// [circularGetAccessor.ts]
|
||||
declare class C {
|
||||
get foo(): typeof this.foo;
|
||||
}
|
||||
|
||||
|
||||
//// [circularGetAccessor.js]
|
||||
@ -0,0 +1,11 @@
|
||||
=== tests/cases/compiler/circularGetAccessor.ts ===
|
||||
declare class C {
|
||||
>C : Symbol(C, Decl(circularGetAccessor.ts, 0, 0))
|
||||
|
||||
get foo(): typeof this.foo;
|
||||
>foo : Symbol(C.foo, Decl(circularGetAccessor.ts, 0, 17))
|
||||
>this.foo : Symbol(C.foo, Decl(circularGetAccessor.ts, 0, 17))
|
||||
>this : Symbol(C, Decl(circularGetAccessor.ts, 0, 0))
|
||||
>foo : Symbol(C.foo, Decl(circularGetAccessor.ts, 0, 17))
|
||||
}
|
||||
|
||||
@ -0,0 +1,11 @@
|
||||
=== tests/cases/compiler/circularGetAccessor.ts ===
|
||||
declare class C {
|
||||
>C : C
|
||||
|
||||
get foo(): typeof this.foo;
|
||||
>foo : any
|
||||
>this.foo : any
|
||||
>this : this
|
||||
>foo : any
|
||||
}
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
tests/cases/compiler/circularGetAccessor.ts(2,9): error TS2502: 'foo' is referenced directly or indirectly in its own type annotation.
|
||||
|
||||
|
||||
==== tests/cases/compiler/circularGetAccessor.ts (1 errors) ====
|
||||
declare class C {
|
||||
get foo(): typeof this.foo;
|
||||
~~~
|
||||
!!! error TS2502: 'foo' is referenced directly or indirectly in its own type annotation.
|
||||
}
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
//// [circularGetAccessor.ts]
|
||||
declare class C {
|
||||
get foo(): typeof this.foo;
|
||||
}
|
||||
|
||||
|
||||
//// [circularGetAccessor.js]
|
||||
@ -0,0 +1,11 @@
|
||||
=== tests/cases/compiler/circularGetAccessor.ts ===
|
||||
declare class C {
|
||||
>C : Symbol(C, Decl(circularGetAccessor.ts, 0, 0))
|
||||
|
||||
get foo(): typeof this.foo;
|
||||
>foo : Symbol(C.foo, Decl(circularGetAccessor.ts, 0, 17))
|
||||
>this.foo : Symbol(C.foo, Decl(circularGetAccessor.ts, 0, 17))
|
||||
>this : Symbol(C, Decl(circularGetAccessor.ts, 0, 0))
|
||||
>foo : Symbol(C.foo, Decl(circularGetAccessor.ts, 0, 17))
|
||||
}
|
||||
|
||||
@ -0,0 +1,11 @@
|
||||
=== tests/cases/compiler/circularGetAccessor.ts ===
|
||||
declare class C {
|
||||
>C : C
|
||||
|
||||
get foo(): typeof this.foo;
|
||||
>foo : any
|
||||
>this.foo : any
|
||||
>this : this
|
||||
>foo : any
|
||||
}
|
||||
|
||||
5
tests/cases/compiler/circularGetAccessor.ts
Normal file
5
tests/cases/compiler/circularGetAccessor.ts
Normal file
@ -0,0 +1,5 @@
|
||||
// @noImplicitAny: true, false
|
||||
|
||||
declare class C {
|
||||
get foo(): typeof this.foo;
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user