我有一个函数,其中有一些参数,其中一些是可选的,例如一些必需的
example(page: number, perPage: number, name?: string, status?: boolean) {
// Body
}
有时我只用status
example(1, 25, true);
这意味着true
和name
一样,这不是我想要的方式。在函数声明中更改顺序无济于事,因为有时我只有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
}
}
但我认为这不是处理此问题的最佳方法。
答案 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'});