I have a type
export type baseEventType = {
eName: string;
mName: string;
};
and I would like to extend it to take a rest parameter
interface gEvent extends baseEventType {
...rest: any[]
}
which obviously won’t work
I would like to use it in this way
export const save = ({ eName, mName, ...rest }: gEvent) =>
So is there a way to make that work. Obviously the following would work
export const save = (eName: string, mName: string, ...rest: any[]) => {
but I would prefer if I can do something similar to the other structure.
>Solution :
You ca add an index signature to the gEvent, but this will in effect disable type checking for the argument, letting you pass in even properties in baseEvetType with any type:
export type baseEventType = {
eName: string;
mName: string;
};
interface gEvent extends baseEventType {
[name: string]: any;
}
export const save = ({ eName, mName, ...rest }: gEvent) => {
}
save({
eName: 0 // eName is declared as string but we can pass number because of the index signature
})
Using an intesection type is probably a better idea here. This will do better when type checking the named properties:
type gEvent = baseEventType & {
[name: string]: any;
}
export const save = ({ eName, mName, ...rest }: gEvent) => {
}
save({
eName: 0, // error
other: "", // ok
})