diff --git a/src/services/codefixes/helpers.ts b/src/services/codefixes/helpers.ts
index 987f6576a39..94b64e57ac9 100644
--- a/src/services/codefixes/helpers.ts
+++ b/src/services/codefixes/helpers.ts
@@ -332,7 +332,7 @@ namespace ts.codefix {
/*questionToken*/ undefined,
typeParameters,
parameters,
- type
+ type === undefined ? factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword) : type
);
case SyntaxKind.FunctionDeclaration:
return factory.createFunctionDeclaration(
diff --git a/src/services/textChanges.ts b/src/services/textChanges.ts
index 9765e8a4fda..59f22c8a9fb 100644
--- a/src/services/textChanges.ts
+++ b/src/services/textChanges.ts
@@ -682,7 +682,7 @@ namespace ts.textChanges {
return {
indentation,
prefix: (insertLeadingComma ? "," : "") + this.newLineCharacter,
- suffix: insertTrailingComma ? "," : ""
+ suffix: insertTrailingComma ? "," : isInterfaceDeclaration(node) && isEmpty ? ";" : ""
};
}
diff --git a/tests/cases/fourslash/codeFixAddMissingMember24.ts b/tests/cases/fourslash/codeFixAddMissingMember24.ts
index 3c58dc9eddd..77c787fb49b 100644
--- a/tests/cases/fourslash/codeFixAddMissingMember24.ts
+++ b/tests/cases/fourslash/codeFixAddMissingMember24.ts
@@ -10,6 +10,6 @@ verify.codeFix({
index: 0,
newRangeContent:
`type Foo = {
- test(arg0: number, arg1: number, arg2: string);
+ test(arg0: number, arg1: number, arg2: string): unknown;
};`
});
diff --git a/tests/cases/fourslash/codeFixAddMissingMember27.ts b/tests/cases/fourslash/codeFixAddMissingMember27.ts
new file mode 100644
index 00000000000..8bf3263a822
--- /dev/null
+++ b/tests/cases/fourslash/codeFixAddMissingMember27.ts
@@ -0,0 +1,18 @@
+///
+
+// @noImplicitAny: true
+
+////interface IFoo {}
+////const foo: IFoo = {}
+////foo.bar()
+
+verify.codeFix({
+ description: [ts.Diagnostics.Declare_method_0.message, "bar"],
+ index: 0,
+ newFileContent:
+`interface IFoo {
+ bar(): unknown;
+}
+const foo: IFoo = {}
+foo.bar()`,
+});
diff --git a/tests/cases/fourslash/codeFixAddMissingMember28.ts b/tests/cases/fourslash/codeFixAddMissingMember28.ts
new file mode 100644
index 00000000000..13a9c9b7457
--- /dev/null
+++ b/tests/cases/fourslash/codeFixAddMissingMember28.ts
@@ -0,0 +1,21 @@
+///
+
+// @noImplicitAny: true
+
+////interface IFoo {
+//// b(): void;
+////}
+////const foo: IFoo = {}
+////foo.a()
+
+verify.codeFix({
+ description: [ts.Diagnostics.Declare_method_0.message, "a"],
+ index: 1,
+ newFileContent:
+`interface IFoo {
+ a(): unknown;
+ b(): void;
+}
+const foo: IFoo = {}
+foo.a()`,
+});
diff --git a/tests/cases/fourslash/codeFixAddMissingMember_all.ts b/tests/cases/fourslash/codeFixAddMissingMember_all.ts
index aed949bf358..6cf030828f0 100644
--- a/tests/cases/fourslash/codeFixAddMissingMember_all.ts
+++ b/tests/cases/fourslash/codeFixAddMissingMember_all.ts
@@ -72,7 +72,7 @@ En.A;
type T = {
x: any;
y: number;
- test(arg0: number, arg1: number);
+ test(arg0: number, arg1: number): unknown;
};
function foo(t: T) {
t.x;