Expand type by incorporating a rest parameter

There's a specific type that I have in mind

export type baseEventType = {
    eName: string;
    mName: string;
    
};

and my goal is to enhance it by incorporating a rest parameter

interface gEvent extends baseEventType {
    ...rest: any[]
}

although this approach seems impractical

I envisioned utilizing it in this fashion

export const save = ({ eName, mName, ...rest }: gEvent) => 

Is there a way to make this concept functional? While the following alternative is feasible

export const save = (eName: string, mName: string, ...rest: any[]) => {

I would prefer to implement something akin to the initial structure.

Answer №1

To allow for additional properties in the gEvent type without compromising type checking, consider adding an index signature:

export type baseEventType = {
    eName: string;
    mName: string;
};
interface gEvent extends baseEventType {
    [name: string]: any;
}

export const save = ({ eName, mName, ...rest }: gEvent) => {

}

save({
  eName: 0 // While eName is declared as a string, passing a number is possible due to the index signature
})

Playground Link

Alternatively, using an intersection type would be more appropriate for robust type checking of named properties:

type gEvent = baseEventType & {
    [name: string]: any;
}

export const save = ({ eName, mName, ...rest }: gEvent) => {

}

save({
  eName: 0, // this will result in an error
  other: "", // this is acceptable
})

Playground Link

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

Is there a way to remove the sign up link from the AWS Amplify Vue authenticator?

Utilizing the amplify-authenticator component from the aws-amplify-vue library to manage authentication in my application. I am currently exploring methods to disable the "Create Account" link on the front end interface, but haven't found a direct sol ...

Having trouble getting useFieldArray to work with Material UI Select component

I am currently working on implementing a dynamic Select field using Material UI and react-hook-form. While the useFieldArray works perfectly with TextField, I am facing issues when trying to use it with Select. What is not functioning properly: The defau ...

There seems to be an issue with the React app where the fetch() response is coming back empty. Strangely enough, when sending

Below is the code for my API call: export async function getTasks(): Promise<Task[]> { if (process.env.NODE_ENV === "test") { return new Promise<Task[]>((resolve) => setTimeout(() => resolve(DefaultTasksArray), 1500) ...

How can I create an interceptor in Angular2 to detect 500 and 404 errors in my app.ts file?

Creating an Angular2 Interceptor for Handling 500 and 404 Errors in app.ts In my app.ts file, I am looking to implement an interceptor that can detect a 500 or 404 error so that I can appropriately redirect to my HTML 404 or HTML 500 pages. Is this funct ...

Why doesn't Typescript 5.0.3 throw an error for incompatible generic parameters in these types?

------------- Prompt and background (Not crucial for understanding the question)---------------- In my TypeScript application, I work with objects that have references to other objects. These references can be either filled or empty, as illustrated below: ...

What is the best way to save an array of objects from an Axios response into a React State using TypeScript?

Apologies in advance, as I am working on a professional project and cannot provide specific details. Therefore, I need to describe the situation without revealing actual terms. I am making a GET request to an API that responds in the following format: [0: ...

Acquire information from an Angular service and output it to the console

I am having trouble logging data from my service file in the app.component file. It keeps showing up as undefined. Below is the code snippet: service.ts getBillingCycles() { return this.http.get('../../assets/download_1.json'); }; app.com ...

Error in Angular Typescript: Utilize the return value of "filter" function to fix the issue

Encountering a sonar error: The return value of "filter" should be utilized Despite using the filter, the error persists. What might be the issue here? array.filter(item => { item.value.split(' ').forEach( i => { if ( doSomething(i) ...

Having difficulties generating ngc and tsc AOT ES5 compatible code

I've explored various options before seeking help here. I have an angular2 library that has been AOT compiled using ngc. Currently, I am not using webpack and solely relying on plain npm scripts. Below is the tsconfig file being utilized: { "comp ...

How can you determine the type of an argument based on the type of another argument?

Is it possible to dynamically assign value types in the const set = (key: keyof Store, value: any) function based on the keys defined in the Store interface? For instance, setting a key foo as type number and key bar as type string[]. import store from & ...

Is it possible that jest is unable to catch the exception?

I have a simple function that looks like this: function foo({ platform }) { if (platform === 'all') { throw new Error('Platform value can only be android or ios'); } return `${platform}`; } After writing unit tests, the re ...

data being released from variables in angular ionic

I am truly perplexed as to why the variables aren't holding their values. I've declared a variable user and initialized it with data from the userData() function. However, it appears as undefined when I log it within the constructor as well as ...

Transforming various date formats into the en-US format of mm/dd/yyyy hh:mm:ss can be accomplished through JavaScript

When encountering a date format in en-GB or European style (mm.dd.yyyy), it should be converted to the en-US format (mm/dd/yyyy). If the date is not already in en-US format, then it needs to be converted accordingly. ...

Determine the time difference between the beginning and ending times using TypeScript

Is there a way to calculate the difference between the start time and end time using the date pipe in Angular? this.startTime=this.datePipe.transform(new Date(), 'hh:mm'); this.endTime=this.datePipe.transform(new Date(), 'hh:mm'); The ...

Ways to expose a declared module in Enzyme's shallow rendering?

I've been grappling with how to ensure that my custom declared module is detected when I shallow render a component using enzyme in Jest unit tests. The issue revolves around a specific module declaration named _aphrodite, which looks like this: // i ...

Having trouble activating the Samsung Tizen TV through the designated APIs

I currently have a Tizen Application for managing TV Operations such as Volume Controls and Power On/Off. I have implemented the use of b2bapis for Power Off functionalities, but I am struggling to locate comprehensive documentation on the same. The code s ...

Obtaining an OBJECT from a hashmap instead of a string

In my code, I am working with a hashmap and I want to extract all the values from this map without needing to reference a specific key. Here is a basic overview of the process: Create a hashmap using an external file with a structure of "id:value" Utili ...

Enumerate the names of the private properties within the class

I am working on a problem where I need to use some of the class properties as values in a map within the class. In the example below, I have used an array instead of a map because when a property is marked private, it is not included in the keyof list. How ...

Is there a way to reset an object's prototype in typescript after fetching it from local storage?

In my TypeScript class, there is a method called getTotal() defined on the prototype. class Score { roundOne: any; roundTwo: any; roundThree: any; roundFour: any; roundFive: any; roundSix: any; roundSeven: any; getTotal() { ...

Typescript: Deciphering how to interpret a string with a mix of characters and numbers

Is there a way in TypeScript to add 40 to a variable of type string | number, and return a result as a string | number? My initial approach was to parse the variable to a number, then perform the addition, but how can I ensure that the variable is proper ...