diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 6f68329ba0a90..493e60af2b820 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -4508,7 +4508,7 @@ export function createPrinter(printerOptions: PrinterOptions = {}, handlers: Pri if (isFunctionLike(parentNode) && parentNode.typeArguments) { // Quick info uses type arguments in place of type parameters on instantiated signatures return emitTypeArguments(parentNode, parentNode.typeArguments); } - emitList(parentNode, typeParameters, ListFormat.TypeParameters); + emitList(parentNode, typeParameters, ListFormat.TypeParameters | (isArrowFunction(parentNode) ? ListFormat.AllowTrailingComma : ListFormat.None)); } function emitParameters(parentNode: Node, parameters: NodeArray) { diff --git a/src/testRunner/unittests/printer.ts b/src/testRunner/unittests/printer.ts index 76f23ab692fb0..86a7b41d167af 100644 --- a/src/testRunner/unittests/printer.ts +++ b/src/testRunner/unittests/printer.ts @@ -100,6 +100,17 @@ describe("unittests:: PrinterAPI", () => { ts.ScriptKind.TSX, )); }); + + // https://github.com/microsoft/TypeScript/issues/59587 + printsCorrectly("lambda type parameter lists in tsx", {}, printer => { + return printer.printFile(ts.createSourceFile( + "source.tsx", + String.raw`export const id = (id: T): T => id`, + ts.ScriptTarget.ESNext, + /*setParentNodes*/ undefined, + ts.ScriptKind.TSX, + )); + }); }); describe("No duplicate ref directives when emiting .d.ts->.d.ts", () => { diff --git a/tests/baselines/reference/printerApi/printsFileCorrectly.lambda type parameter lists in tsx.js b/tests/baselines/reference/printerApi/printsFileCorrectly.lambda type parameter lists in tsx.js new file mode 100644 index 0000000000000..c28604711e83b --- /dev/null +++ b/tests/baselines/reference/printerApi/printsFileCorrectly.lambda type parameter lists in tsx.js @@ -0,0 +1 @@ +export const id = (id: T): T => id;