diff --git a/src/compiler/declarationEmitter.ts b/src/compiler/declarationEmitter.ts index a9b3568bfe6..43c635db2f2 100644 --- a/src/compiler/declarationEmitter.ts +++ b/src/compiler/declarationEmitter.ts @@ -608,7 +608,12 @@ namespace ts { "?"); } write(": "); - emitType(node.type); + if (node.type) { + emitType(node.type); + } + else { + write("any"); + } write(";"); writeLine(); decreaseIndent(); diff --git a/tests/baselines/reference/mappedTypeNoTypeNoCrash.errors.txt b/tests/baselines/reference/mappedTypeNoTypeNoCrash.errors.txt new file mode 100644 index 00000000000..1e32656c699 --- /dev/null +++ b/tests/baselines/reference/mappedTypeNoTypeNoCrash.errors.txt @@ -0,0 +1,16 @@ +tests/cases/compiler/mappedTypeNoTypeNoCrash.ts(1,51): error TS2304: Cannot find name 'K'. +tests/cases/compiler/mappedTypeNoTypeNoCrash.ts(1,51): error TS4081: Exported type alias 'T0' has or is using private name 'K'. +tests/cases/compiler/mappedTypeNoTypeNoCrash.ts(1,57): error TS2304: Cannot find name 'K'. +tests/cases/compiler/mappedTypeNoTypeNoCrash.ts(1,57): error TS4081: Exported type alias 'T0' has or is using private name 'K'. + + +==== tests/cases/compiler/mappedTypeNoTypeNoCrash.ts (4 errors) ==== + type T0 = ({[K in keyof T]}) extends ({[key in K]: T[K]}) ? number : never; + ~ +!!! error TS2304: Cannot find name 'K'. + ~ +!!! error TS4081: Exported type alias 'T0' has or is using private name 'K'. + ~ +!!! error TS2304: Cannot find name 'K'. + ~ +!!! error TS4081: Exported type alias 'T0' has or is using private name 'K'. \ No newline at end of file diff --git a/tests/baselines/reference/mappedTypeNoTypeNoCrash.js b/tests/baselines/reference/mappedTypeNoTypeNoCrash.js new file mode 100644 index 00000000000..ad1d9bba0bf --- /dev/null +++ b/tests/baselines/reference/mappedTypeNoTypeNoCrash.js @@ -0,0 +1,4 @@ +//// [mappedTypeNoTypeNoCrash.ts] +type T0 = ({[K in keyof T]}) extends ({[key in K]: T[K]}) ? number : never; + +//// [mappedTypeNoTypeNoCrash.js] diff --git a/tests/baselines/reference/mappedTypeNoTypeNoCrash.symbols b/tests/baselines/reference/mappedTypeNoTypeNoCrash.symbols new file mode 100644 index 00000000000..7faf2d7b35f --- /dev/null +++ b/tests/baselines/reference/mappedTypeNoTypeNoCrash.symbols @@ -0,0 +1,9 @@ +=== tests/cases/compiler/mappedTypeNoTypeNoCrash.ts === +type T0 = ({[K in keyof T]}) extends ({[key in K]: T[K]}) ? number : never; +>T0 : Symbol(T0, Decl(mappedTypeNoTypeNoCrash.ts, 0, 0)) +>T : Symbol(T, Decl(mappedTypeNoTypeNoCrash.ts, 0, 8)) +>K : Symbol(K, Decl(mappedTypeNoTypeNoCrash.ts, 0, 16)) +>T : Symbol(T, Decl(mappedTypeNoTypeNoCrash.ts, 0, 8)) +>key : Symbol(key, Decl(mappedTypeNoTypeNoCrash.ts, 0, 43)) +>T : Symbol(T, Decl(mappedTypeNoTypeNoCrash.ts, 0, 8)) + diff --git a/tests/baselines/reference/mappedTypeNoTypeNoCrash.types b/tests/baselines/reference/mappedTypeNoTypeNoCrash.types new file mode 100644 index 00000000000..0ec1e7723f8 --- /dev/null +++ b/tests/baselines/reference/mappedTypeNoTypeNoCrash.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/mappedTypeNoTypeNoCrash.ts === +type T0 = ({[K in keyof T]}) extends ({[key in K]: T[K]}) ? number : never; +>T0 : number +>T : T +>K : K +>T : T +>key : key +>K : No type information available! +>T : T +>K : No type information available! + diff --git a/tests/cases/compiler/mappedTypeNoTypeNoCrash.ts b/tests/cases/compiler/mappedTypeNoTypeNoCrash.ts new file mode 100644 index 00000000000..fc9760c7a69 --- /dev/null +++ b/tests/cases/compiler/mappedTypeNoTypeNoCrash.ts @@ -0,0 +1,2 @@ +// @declaration: true +type T0 = ({[K in keyof T]}) extends ({[key in K]: T[K]}) ? number : never; \ No newline at end of file