Skip to main content

Cannot invoke an object which is possibly 'undefined' in TS

When working with TypeScript, you may encounter the error “Cannot invoke an object which is possibly ‘undefined'” when trying to invoke a function property that could be undefined, marked as optional. The error occurs because TypeScript wants to ensure that the property could not possibly have an undefined value, as trying to invoke undefined would cause a runtime error. In this article, we will explore several solutions to this error, including using the optional chaining operator (?.) and logical AND (&&) operator.

Understanding the Error

To better understand the error, let’s take a look at an example:

type Employee = {  doWork?: () => void;};const employee: Employee = {};// Error: Cannot invoke an object which// is possibly 'undefined'.ts(2722)employee.doWork();

In this example, we have defined an Employee type with an optional doWork function property. We then create an employee object, but do not assign the doWork property a value. When we try to invoke the doWork function, we get the “Cannot invoke an object which is possibly ‘undefined'” error.

Solution 1: Using the Optional Chaining Operator (?.)

One solution to this error is to use the optional chaining operator (?.) when invoking the function. The optional chaining operator short-circuits instead of throwing an error if the reference is undefined or null. Here’s how we can use it in our example:

type Employee = {  doWork?: () => void;};const employee: Employee = {};// Works nowemployee.doWork?.();

In this example, we use the ?. operator when invoking the doWork function. If the reference is equal to undefined or null, we will just short-circuit, returning undefined without causing any errors. On the other hand, if the function is defined, it will be invoked.

Solution 2: Using Logical AND (&&) Operator

Another solution is to use the logical AND (&&) operator to ensure that the property is not undefined before calling the function. Here’s how we can use it in our example:

type Employee = {  doWork?: () => void;};const employee: Employee = {};const result = employee.doWork && employee.doWork();

The logical AND (&&) operator returns the value to the right if the value to the left is truthy. Since undefined is a falsy value, we wouldn’t reach the code to the right of the logical AND (&&) operator if employee.doWork is undefined.

Example in React

This error is also common in React.js projects when passing props with functions that are marked as optional. Here’s an example of this error occurring in a React component:

type ButtonProps = {  onClick?: () => void;};function Button(props: ButtonProps) {  // Error: Cannot invoke an object  // which is possibly 'undefined'.ts(2722)  return <button onClick={() => props.onClick()}>Click me</button>;}

In this example, we have a Button component that takes a ButtonProps type as its props. The ButtonProps type has an optional onClick function property. When the button is clicked, we are trying to invoke the onClick function, but since it is marked as optional, it could be undefined, causing the “Cannot invoke an object which is possibly ‘undefined'” error.

To solve this error, we can use the same solutions we discussed earlier. Here’s an example of using the optional chaining operator (?.) to solve the error:

type ButtonProps = {  onClick?: () => void;};function Button(props: ButtonProps) {  // works now  return <button onClick={() => props.onClick?.()}>Click me</button>;}

Alternatively, we can also use the logical AND (&&) operator to ensure that the property is not undefined before calling the function:

type ButtonProps = {  onClick?: () => void;};function Button(props: ButtonProps) {  return <button onClick={() => props.onClick && props.onClick()}>Click me</button>;}

Conclusion on “Cannot invoke an object which is possibly ‘undefined’ in TS”

The “Cannot invoke an object which is possibly ‘undefined'” error occurs when we try to invoke a function property that could be undefined, e.g. is marked as optional. To solve the error, we can use the optional chaining operator (?.) or logical AND (&&) operator. Both of these solutions help ensure that the property is not undefined before calling the function, thus avoiding a runtime error.

In summary, “Cannot invoke an object which is possibly ‘undefined'” error occurs when we try to invoke a function property that could be undefined, which is marked as optional. And the solution is to use the optional chaining operator (?.) or logical AND (&&) operator to ensure the property is not undefined before calling the function.

Comments

Popular posts from this blog

Best Health Insurance For Students in USA

Whether you're a domestic or international student studying in the USA, having health insurance coverage is not just a luxury, it's a necessity. With the high cost of healthcare in the USA, having the best health insurance for students in the USA can provide you with peace of mind while you focus on your studies. Understanding the Need for Health Insurance for Students Being a student, the likelihood of you being healthy and not needing frequent medical attention is quite high. But life is unpredictable, and emergencies can arise at any time. If a sudden injury or illness strikes, the resulting healthcare costs can become a major financial burden if you are uninsured. With the steep price of medical care in the United States, even a simple trip to the emergency room can lead to exorbitant bills. By having a good health insurance plan, students can mitigate these financial risks. Such plans cover a wide array of medical services, ranging from regular preventive care to prolonge...

5 Best Shared Hosting Services for 2024

Are you looking for the best shared hosting services for your website in 2024? With so many options out there, it can be overwhelming to choose the right one. That's why we've narrowed down the top picks for the 5 best shared hosting services for 2024. These hosting providers have been carefully selected based on their features, pricing, and customer satisfaction. Whether you're a small business owner or a blogger, these hosting services offer reliable and affordable solutions to meet your website needs. Let's dive into our top picks for the 5 best shared hosting services of 2024. What is Shared Hosting and Why It's Beneficial? Shared hosting is a type of web hosting where multiple websites reside on one server, all utilizing the same resources. This makes it an affordable option as costs are divided among users. Shared hosting is ideal for small businesses, blogs, or personal websites due to its cost-effectiveness and ease of use. Plus, it eliminates the need fo...

7 Best VPS Hosting Services in 2024

Virtual Private Server (VPS) hosting services have become increasingly popular in recent years. Businesses and individuals prefer VPS hosting for its excellent balance between cost and control, offering more flexibility than shared hosting and more affordability than dedicated hosting. As we step into the year 2024, let’s explore the 7 best VPS hosting services available today. Bluehost - Stellar Uptime and Excellent Support Navigating the crowded VPS hosting landscape, Bluehost has distinguished itself with an unbeatable uptime guarantee. This assurance ensures your website remains accessible around the clock, courtesy of their resilient infrastructure. Bluehost also shines with their 24/7 customer support. No matter the nature of your inquiry - be it a simple query or a convoluted technical issue - their dedicated team stands at the ready to lend a helping hand. With Bluehost, you'll enjoy top-notch service with an unwavering commitment to keep your website running smoothly. H...