diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 92005a36b65..b891a0ec6c0 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -20640,6 +20640,9 @@ namespace ts { function createMarkerType(symbol: Symbol, source: TypeParameter, target: Type) { const mapper = makeUnaryTypeMapper(source, target); const type = getDeclaredTypeOfSymbol(symbol); + if (isErrorType(type)) { + return type; + } const result = symbol.flags & SymbolFlags.TypeAlias ? getTypeAliasInstantiation(symbol, instantiateTypes(getSymbolLinks(symbol).typeParameters!, mapper)) : createTypeReference(type as GenericType, instantiateTypes((type as GenericType).typeParameters, mapper)); diff --git a/tests/baselines/reference/varianceAnnotationsWithCircularlyReferencesError.errors.txt b/tests/baselines/reference/varianceAnnotationsWithCircularlyReferencesError.errors.txt new file mode 100644 index 00000000000..d6589051967 --- /dev/null +++ b/tests/baselines/reference/varianceAnnotationsWithCircularlyReferencesError.errors.txt @@ -0,0 +1,17 @@ +tests/cases/conformance/types/typeParameters/typeParameterLists/varianceAnnotationsWithCircularlyReferencesError.ts(1,6): error TS2456: Type alias 'T1' circularly references itself. +tests/cases/conformance/types/typeParameters/typeParameterLists/varianceAnnotationsWithCircularlyReferencesError.ts(1,11): error TS2300: Duplicate identifier '(Missing)'. +tests/cases/conformance/types/typeParameters/typeParameterLists/varianceAnnotationsWithCircularlyReferencesError.ts(1,12): error TS1359: Identifier expected. 'in' is a reserved word that cannot be used here. +tests/cases/conformance/types/typeParameters/typeParameterLists/varianceAnnotationsWithCircularlyReferencesError.ts(2,6): error TS2456: Type alias 'T2' circularly references itself. + + +==== tests/cases/conformance/types/typeParameters/typeParameterLists/varianceAnnotationsWithCircularlyReferencesError.ts (4 errors) ==== + type T1 = T1 // Error: circularly references + ~~ +!!! error TS2456: Type alias 'T1' circularly references itself. + +!!! error TS2300: Duplicate identifier '(Missing)'. + ~~ +!!! error TS1359: Identifier expected. 'in' is a reserved word that cannot be used here. + type T2 = T2 // Error: circularly references + ~~ +!!! error TS2456: Type alias 'T2' circularly references itself. \ No newline at end of file diff --git a/tests/baselines/reference/varianceAnnotationsWithCircularlyReferencesError.js b/tests/baselines/reference/varianceAnnotationsWithCircularlyReferencesError.js new file mode 100644 index 00000000000..8f2cc8a9c38 --- /dev/null +++ b/tests/baselines/reference/varianceAnnotationsWithCircularlyReferencesError.js @@ -0,0 +1,11 @@ +//// [varianceAnnotationsWithCircularlyReferencesError.ts] +type T1 = T1 // Error: circularly references +type T2 = T2 // Error: circularly references + +//// [varianceAnnotationsWithCircularlyReferencesError.js] +"use strict"; + + +//// [varianceAnnotationsWithCircularlyReferencesError.d.ts] +declare type T1 = T1; +declare type T2 = T2; diff --git a/tests/baselines/reference/varianceAnnotationsWithCircularlyReferencesError.symbols b/tests/baselines/reference/varianceAnnotationsWithCircularlyReferencesError.symbols new file mode 100644 index 00000000000..cb4760c4430 --- /dev/null +++ b/tests/baselines/reference/varianceAnnotationsWithCircularlyReferencesError.symbols @@ -0,0 +1,12 @@ +=== tests/cases/conformance/types/typeParameters/typeParameterLists/varianceAnnotationsWithCircularlyReferencesError.ts === +type T1 = T1 // Error: circularly references +>T1 : Symbol(T1, Decl(varianceAnnotationsWithCircularlyReferencesError.ts, 0, 0)) +> : Symbol((Missing), Decl(varianceAnnotationsWithCircularlyReferencesError.ts, 0, 8), Decl(varianceAnnotationsWithCircularlyReferencesError.ts, 0, 10)) +> : Symbol((Missing), Decl(varianceAnnotationsWithCircularlyReferencesError.ts, 0, 8), Decl(varianceAnnotationsWithCircularlyReferencesError.ts, 0, 10)) +>T1 : Symbol(T1, Decl(varianceAnnotationsWithCircularlyReferencesError.ts, 0, 0)) + +type T2 = T2 // Error: circularly references +>T2 : Symbol(T2, Decl(varianceAnnotationsWithCircularlyReferencesError.ts, 0, 19)) +>out : Symbol(out, Decl(varianceAnnotationsWithCircularlyReferencesError.ts, 1, 8)) +>T2 : Symbol(T2, Decl(varianceAnnotationsWithCircularlyReferencesError.ts, 0, 19)) + diff --git a/tests/baselines/reference/varianceAnnotationsWithCircularlyReferencesError.types b/tests/baselines/reference/varianceAnnotationsWithCircularlyReferencesError.types new file mode 100644 index 00000000000..21c624057f1 --- /dev/null +++ b/tests/baselines/reference/varianceAnnotationsWithCircularlyReferencesError.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/types/typeParameters/typeParameterLists/varianceAnnotationsWithCircularlyReferencesError.ts === +type T1 = T1 // Error: circularly references +>T1 : any + +type T2 = T2 // Error: circularly references +>T2 : any + diff --git a/tests/cases/conformance/types/typeParameters/typeParameterLists/varianceAnnotationsWithCircularlyReferencesError.ts b/tests/cases/conformance/types/typeParameters/typeParameterLists/varianceAnnotationsWithCircularlyReferencesError.ts new file mode 100644 index 00000000000..3ad0e4a6a57 --- /dev/null +++ b/tests/cases/conformance/types/typeParameters/typeParameterLists/varianceAnnotationsWithCircularlyReferencesError.ts @@ -0,0 +1,5 @@ +// @strict: true +// @declaration: true + +type T1 = T1 // Error: circularly references +type T2 = T2 // Error: circularly references \ No newline at end of file