函数中的参数,其中一些是可选的,一些是必需的

时间:2019-08-13 09:13:37

标签: angular typescript

我有一个函数,其中有一些参数,其中一些是可选的,例如一些必需的

example(page: number, perPage: number, name?: string, status?: boolean) {
    // Body
}

有时我只用status

来称呼它
example(1, 25, true);

这意味着truename一样,这不是我想要的方式。在函数声明中更改顺序无济于事,因为有时我只有name

我正在尝试类似的操作,并在服务中检查参数是否不等于null。

example(1, 25, null, true);

example.service.ts

example(page: number, perPage: number, name?: string, status?: boolean) {
    if (name !== null) {
        // body
    }
    if (status !== null) {
       // body
    }
}

但我认为这不是处理此问题的最佳方法。

4 个答案:

答案 0 :(得分:4)

不确定,但是您是否尝试过传递对象而不是参数列表?

example(data: {page: number, perPage: number, name?: string, status?: boolean}) {
  //code goes here
}
example({page: 1, perPage: 25, status: true})

在这种情况下,您将获得在对象中传递的确切值

答案 1 :(得分:0)

有几种方法可以解决此问题。第一个是通过将第三个参数传递为undefined

example(1, 25, undefined, true);

另一种方法是接受单个参数即对象

interface Options {
  page: numberl; perPage: number; name?: string; status?: boolean;
}

这使您的函数的行为就像接受命名参数一样。

example({page: 1, perPage: 25, status: true});

// in your function you can use destructuring for brevity

interface Options {
  page: number; perPage: number; name?: string; status?: boolean;
}

example(options: Options) {
   const {page, perPage, name, status} = options
    // Body
}

答案 2 :(得分:0)

当您不将任何值传递给可选参数时,它们的值将变为undefined(来源:docs)。因此,您只需为该特定参数传递undefined

仅用example()呼叫status

example(1, 25, undefined, true);

答案 3 :(得分:0)

只需以对象形式传递参数,然后在方法中迭代该对象

example(paramObj) {
    //iterate params here
    let paramArr = Object.keys(paramObj)

}

//calling
example({name:'Xyz Person'});