The error message "SPARTACUS is indicating that there is no 'unit' property defined for the 'Product' type

I need help adding a new attribute to the Product DTO in Spartacus. I followed the documentation and created a new TS file with the following code:

declare module '@spartacus/core' {
  export interface Product {
    unit?: string;
  }
}

However, when trying to reference this in my HTML, I encounter an error saying "Property 'unit' does not exist on type 'Product'."

Do I need to do anything else to make this work effectively?

If I modify it as displayed below, it works:

export interface CustomProduct extends Product {
  unit?: string;
}

But by making this change, I have to replace instances of 'Product' with 'CustomProduct' throughout the entire codebase.

This issue arises on both the PDP and Cart Page. Do I need to override any Normalizer for this?

Answer №1

Ensure to import the file with module augmentation from another file included in compilation. For more details, refer to the documentation:

Note: Whenever a module is augmented in a file, there must be at least one import from the module, even if it's unused.

(source: )

Alternatively, you can avoid the need to "hack" by renaming the file that includes module augmentation to have a .d.ts extension instead of .ts

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Does C# have an equivalent to TypeScript's Never type?

Is there a C# equivalent for TypeScript's never type? I am curious about this. For example, in TypeScript, if I write the following code, I will get a build time error: enum ActionTypes { Add, Remove } type IAdd = {type: ActionTypes.Add}; t ...

How to conditionally make a property optional in Typescript depending on the value of another property

I'm a newcomer to Typescript and I've encountered a scenario that has been difficult for me to find a solution for. Any suggestions would be greatly appreciated. My goal is to have the property options be optional when the type is either SHORT_T ...

Is there a solution to successfully retrieving the value of res from the readCsv() method instead of it returning undefined?

In this scenario, I have a file uploader that accepts .json and .csv files. When the upload button is clicked, the HomeComponent calls the service dataparser which has two functions: readJson and readCsv. One function returns an observable while the other ...

Error encountered while attempting to import a virtual module, import resolution unsuccessful

I've been working on creating type declarations for a Javascript module in Typescript. My goal is to define interfaces using what I believe is a virtual module. Initially, I had no trouble defining the base module types. However, when attempting to im ...

Angular - Retrieve array of child components upon initialization

Currently, I am utilizing Angular 10 for a personal side project. Within this project, there is a specific page that, upon loading, fetches a collection of entries (in this case, primarily spells) from the server and displays one child component (<app-s ...

typescript create object with immutable property already set

Can you create an object literal in JavaScript and define its interface with read-only properties simultaneously? For instance let obj = { readonly prop1: 'hello', readonly prop2: 'world' } ...

Issue encountered while executing Mongoose update function in the router.patch() method

I encountered an issue while trying to update a product on a cloud-based mongoose database using router.patch(). I am simulating the update process with Postman, but I keep receiving an error that says "req.body[Symbol.iterator] is not a function." Below i ...

Ensuring Type Safety with Setter-Only Properties in TypeScript

I found it quite surprising that this piece of code compiles without any issues in TypeScript, but throws an error at runtime: class Y { set writeOnlyProp(value: number) { // perform some actions here } } const y = new Y() // runtime error ...

Guide to turning off the previous button in FullCalendar using Angular 7 and TypeScript

Can someone help me with disabling the previous button on FullCalendar if I go back 2 months? For example, if it's currently April and I navigate to February, I want the previous button to be disabled. I have FullCalendar implemented, but all the sol ...

Printing in HTML with Angular based on certain conditions

As I cycle through a list of products, I am verifying if the product Id is already included in an array of products (objects). If it is, then I print the quantity. If not, I attempt to print 0. Here is the code snippet I have been working on: <ion-item ...

Vue and Vuetify tutorial: Implementing validation for individual chip items within a select input instead of the entire input field

Is there a way to implement validation (using vee-validate) on each individual chips item? Below is the current code snippet: <v-select class="elevation-0 mt-border-bottom" v-model="PhoneNumber" label="Add phone number" chips tags solo p ...

Is the spread operator in React failing to function as anticipated?

In my current project, I encountered an issue while trying to pass a GeolocationCoordinates object to a child component using the spread operator. Strangely, in the child props, it appears as an empty object: interface HUDState { geoCoords: Geolocation ...

Growing React ecosystem resembling that of Angular

Angular appears to come with everything which for the client-side. On the other hand, React comes by itself. Are there any common consensus on how to get expand React/React Native with typescript in order to get a similar experience as with Angular. Are ...

Issue: Unrecognized element type in next.js while starting development server

Every time I run npm run dev, I encounter the following error: Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from th ...

Accessing the hidden properties of an object within a class

I encountered the following explanation and found it confusing. The main idea is: The private access modifier in a constructor automatically assigns the parameter to "this" (such as this.file) and makes its visibility private, allowing code within an ins ...

Generating TypeScript Type Definitions for dynamic usage

In my client server application, I use REST calls for communication. To avoid using the wrong types by mistake, I have defined all RestCalls in a common file (excerpt): type def<TConnection extends Connections> = // Authentication ...

Can someone help me create Three.js types using the frontend option I choose?

I'm currently developing a user-friendly browser application for editing shaders in three.js using react-three-fiber. I want to enhance the functionality by allowing users to add additional uniforms to the ShaderMaterial. However, I do not want to exp ...

Allowing HTML attributes in reusable components with Vue TSX: A guide on informing Typescript

Imagine I have a custom input component: import { defineComponent } from "@vue/runtime-core" export default defineComponent({ inheritAttrs: false, setup(props, { attrs }) { return () => ( <div> ...

Route.get() is expecting a callback function, however it received an object of undefined instead

In my nodejs application using typescript, I am working on separating the routing by introducing interfaces and controllers to handle the logic. app.ts const countryRoutes = require('./routes/countryroute') app.use('/countries', count ...

What is the process for inferring generic return values in TypeScript methods?

I'm curious about how TypeScript infers return types with generics. When a method that uses a generic type as its return value is called without specifying a generic type parameter, how does TypeScript infer the return type? I know that a generic type ...