From 0c09d2f1726e188d7fe95c84b2512f3ce015e96f Mon Sep 17 00:00:00 2001
From: "Lyu, Wei-Da" <36730922+jasonlyu123@users.noreply.github.com>
Date: Tue, 6 Dec 2022 04:23:59 +0800
Subject: [PATCH] quick fix for a nullable missing callback function (#51743)
---
src/services/codefixes/fixAddMissingMember.ts | 2 +-
.../codeFixAddMissingFunctionDeclaration26.ts | 29 +++++++++++++++++++
.../codeFixAddMissingFunctionDeclaration27.ts | 29 +++++++++++++++++++
3 files changed, 59 insertions(+), 1 deletion(-)
create mode 100644 tests/cases/fourslash/codeFixAddMissingFunctionDeclaration26.ts
create mode 100644 tests/cases/fourslash/codeFixAddMissingFunctionDeclaration27.ts
diff --git a/src/services/codefixes/fixAddMissingMember.ts b/src/services/codefixes/fixAddMissingMember.ts
index 490d65171be..80fdb0380ad 100644
--- a/src/services/codefixes/fixAddMissingMember.ts
+++ b/src/services/codefixes/fixAddMissingMember.ts
@@ -330,7 +330,7 @@ function getInfo(sourceFile: SourceFile, tokenPos: number, errorCode: number, ch
}
if (isIdentifier(token)) {
- const type = checker.getContextualType(token);
+ const type = checker.getContextualType(token)?.getNonNullableType();
if (type && getObjectFlags(type) & ObjectFlags.Anonymous) {
const signature = firstOrUndefined(checker.getSignaturesOfType(type, SignatureKind.Call));
if (signature === undefined) return undefined;
diff --git a/tests/cases/fourslash/codeFixAddMissingFunctionDeclaration26.ts b/tests/cases/fourslash/codeFixAddMissingFunctionDeclaration26.ts
new file mode 100644
index 00000000000..156be5141e8
--- /dev/null
+++ b/tests/cases/fourslash/codeFixAddMissingFunctionDeclaration26.ts
@@ -0,0 +1,29 @@
+///
+
+// @strict: true
+
+////interface Foo {
+//// a: ((e: any) => void) | null;
+////}
+////
+////const foo: Foo = {
+//// a: fn
+////}
+
+verify.codeFix({
+ index: 0,
+ description: [ts.Diagnostics.Add_missing_function_declaration_0.message, "fn"],
+ newFileContent:
+`interface Foo {
+ a: ((e: any) => void) | null;
+}
+
+const foo: Foo = {
+ a: fn
+}
+
+function fn(e: any): void {
+ throw new Error("Function not implemented.");
+}
+`
+});
diff --git a/tests/cases/fourslash/codeFixAddMissingFunctionDeclaration27.ts b/tests/cases/fourslash/codeFixAddMissingFunctionDeclaration27.ts
new file mode 100644
index 00000000000..363dac2a30d
--- /dev/null
+++ b/tests/cases/fourslash/codeFixAddMissingFunctionDeclaration27.ts
@@ -0,0 +1,29 @@
+///
+
+// @strict: true
+
+////interface Foo {
+//// a?: ((e: any) => void);
+////}
+////
+////const foo: Foo = {
+//// a: fn
+////}
+
+verify.codeFix({
+ index: 0,
+ description: [ts.Diagnostics.Add_missing_function_declaration_0.message, "fn"],
+ newFileContent:
+`interface Foo {
+ a?: ((e: any) => void);
+}
+
+const foo: Foo = {
+ a: fn
+}
+
+function fn(e: any): void {
+ throw new Error("Function not implemented.");
+}
+`
+});