diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index dd431a50b6c..a0a1dcaad17 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -4532,7 +4532,8 @@ namespace ts { const returnType = getReturnTypeOfSignature(signature); returnTypeNode = returnType && typeToTypeNodeHelper(returnType, context); } - if (context.flags & NodeBuilderFlags.SuppressAnyReturnType) { + if (context.flags & NodeBuilderFlags.SuppressAnyReturnType + && kind !== SyntaxKind.FunctionType && kind !== SyntaxKind.ConstructorType) { if (returnTypeNode && returnTypeNode.kind === SyntaxKind.AnyKeyword) { returnTypeNode = undefined; } diff --git a/tests/cases/fourslash/codeFixClassImplementInterfaceCallback.ts b/tests/cases/fourslash/codeFixClassImplementInterfaceCallback.ts new file mode 100644 index 00000000000..65692ca013b --- /dev/null +++ b/tests/cases/fourslash/codeFixClassImplementInterfaceCallback.ts @@ -0,0 +1,75 @@ +/// + +// #35508 + +////interface IFoo1 { +//// parse(reviver: () => any): void; +////} +//// +////class Foo1 implements IFoo1 { +////} +//// +////interface IFoo2 { +//// parse(reviver: { (): any }): void; +////} +//// +////class Foo2 implements IFoo2 { +////} +//// +////interface IFoo3 { +//// parse(reviver: new () => any): void; +////} +//// +////class Foo3 implements IFoo3 { +////} +//// +////interface IFoo4 { +//// parse(reviver: { new (): any }): void; +////} +//// +////class Foo4 implements IFoo4 { +////} + +verify.codeFixAll({ + fixAllDescription: ts.Diagnostics.Implement_all_unimplemented_interfaces.message, + fixId: "fixClassIncorrectlyImplementsInterface", + newFileContent: +`interface IFoo1 { + parse(reviver: () => any): void; +} + +class Foo1 implements IFoo1 { + parse(reviver: () => any): void { + throw new Error("Method not implemented."); + } +} + +interface IFoo2 { + parse(reviver: { (): any }): void; +} + +class Foo2 implements IFoo2 { + parse(reviver: () => any): void { + throw new Error("Method not implemented."); + } +} + +interface IFoo3 { + parse(reviver: new () => any): void; +} + +class Foo3 implements IFoo3 { + parse(reviver: new () => any): void { + throw new Error("Method not implemented."); + } +} + +interface IFoo4 { + parse(reviver: { new (): any }): void; +} + +class Foo4 implements IFoo4 { + parse(reviver: new () => any): void { + throw new Error("Method not implemented."); + } +}`});