How to pass optional parameters while omitting some other optional parameters?
Another approach is:
error(message: string, options?: {title?: string, autoHideAfter?: number});
So when you want to omit the title parameter, just send the data like that:
error('the message', { autoHideAfter: 1 })
I'd rather this options because allows me to add more parameter without having to send the others.
You can also use Partial<T>
type in method's signature but it this case you have to create an interface for your options:
interface IMyOptions {
title: string;
autoHideAfter: number;
}
And then the method's signature can look like:
error(message: string, options?: Partial<IMyOptions>);
Usage is the same as above.
Type Partial<T>
should already be declared in global typings as following:
type Partial<T> = {
[P in keyof T]?: T[P];
};
As specified in the documentation, use undefined
:
export interface INotificationService {
error(message: string, title?: string, autoHideAfter? : number);
}
class X {
error(message: string, title?: string, autoHideAfter?: number) {
console.log(message, title, autoHideAfter);
}
}
new X().error("hi there", undefined, 1000);
Playground link.
Unfortunately there is nothing like this in TypeScript (more details here: https://github.com/Microsoft/TypeScript/issues/467)
But to get around this you can change your params to be an interface:
export interface IErrorParams {
message: string;
title?: string;
autoHideAfter?: number;
}
export interface INotificationService {
error(params: IErrorParams);
}
//then to call it:
error({message: 'msg', autoHideAfter: 42});
you can use optional variable by ?
or if you have multiple optional variable by ...
, example:
function details(name: string, country="CA", address?: string, ...hobbies: string) {
// ...
}
In the above:
name
is requiredcountry
is required and has a default valueaddress
is optionalhobbies
is an array of optional params