请签名如下:

export interface INotificationService {
    error(message: string, title?: string, autoHideAfter?: number);
}

我如何调用函数error()不指定标题参数,但设置autoHideAfter说1000?


当前回答

你可以使用可选变量by ?或者如果你有多个可选变量。,例如:

function details(name: string, country="CA", address?: string, ...hobbies: string) {
    // ...
}

在上述:

必须填写姓名 Country是必选项,有默认值 地址可选 嗜好是一个可选参数数组

其他回答

在这种情况下,你可以对那些你不想覆盖的可选参数使用“undefined”值

export interface INotificationService {
    error(message: string, title?: string, autoHideAfter?: number);
}

你可以调用类似的错误方法

error("it works", undefined, 20);

注意,null在这里不起作用。

您可以创建一个helper方法,该方法根据错误参数接受一个对象参数

 error(message: string, title?: string, autoHideAfter?: number){}

 getError(args: { message: string, title?: string, autoHideAfter?: number }) {
    return error(args.message, args.title, args.autoHideAfter);
 }

这与@Brocco的回答几乎相同,但略有不同:只在对象中传递可选参数。(并使params对象可选)。

它最终有点像Python的**kwargs,但又不完全是。

export interface IErrorParams {
  title?: string;
  autoHideAfter?: number;
}

export interface INotificationService {
  // make params optional so you don't have to pass in an empty object
  // in the case that you don't want any extra params
  error(message: string, params?: IErrorParams);
}

// all of these will work as expected
error('A message with some params but not others:', {autoHideAfter: 42});
error('Another message with some params but not others:', {title: 'StackOverflow'});
error('A message with all params:', {title: 'StackOverflow', autoHideAfter: 42});
error('A message with all params, in a different order:', {autoHideAfter: 42, title: 'StackOverflow'});
error('A message with no params at all:');

如文档中所述,使用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);

操场上的链接。

你可以使用可选变量by ?或者如果你有多个可选变量。,例如:

function details(name: string, country="CA", address?: string, ...hobbies: string) {
    // ...
}

在上述:

必须填写姓名 Country是必选项,有默认值 地址可选 嗜好是一个可选参数数组