gpt4 book ai didi

typescript - 在 TypeScript 参数签名中处理潜在的空参数

转载 作者:搜寻专家 更新时间:2023-10-30 21:08:42 25 4
gpt4 key购买 nike

在我的应用程序中,我有一项服务具有多次使用的方法。一个方法接受一系列这样的参数(参数的名称/指示在我的示例中是无关紧要的)......

doSomething(url: string, data: any, qParams?: QueryParams) {}

现在我需要扩展它以采用第四个可选参数,如下所示:

doSomething(url: string, data: any, qParams?: QueryParams, headers?: HeadersType) {}

请注意QueryParamsHeadersType是我写的两种自定义类型。然而,在某些情况下 qParams将为空,标题将包含 headersType目的。因此在某些情况下,我会像这样调用方法 doSomething(urlValue, dataVal)doSomething(urlVal, dataVal, qParamsVal)doSomething(urlVal, dataVal, null, headersVal)doSomething(urlVal, dataVal, qParamsVal, headersVal)

当我想要 headersVal 时,避免必须将空值放入参数列表的最佳方法是什么?但不是 qParamsVal .我意识到我可以只传递一个带有键的对象,但我可以使用扩展运算符或其他东西吗?我正在使用 TypeScript,我的应用程序是使用 Angular2 编写的。

提前致谢

最佳答案

当您有 4 个参数时,将它们作为具有 4 个属性的对象传递可能有意义,其中一些属性是可选的。

您可以使用 shorthand object literal打电话时,object destructuring对于定义方法时的参数,所以调用方法的各种方式看起来像

doSomething({url, data})  // when actual parameters names match args names exactly 

doSomething({url: urlVal, data: dataVal}); // when they don't

doSomething({url: urlVal, data: dataVal, qParams: qParamsVal});

doSomething({url: urlVal, data: dataVal, headers: headersVal});

doSomething({url, data, qParams, headers: headersVal});

你必须为参数定义一个接口(interface),所以当你定义一个函数时会有一些名称重复:

interface DoSomething {
url: string;
data: any;
qParams?: QueryParams;
headers?: HeadersType;
}
doSomething({url, data, qParams, headers}: DoSomething): void {
....
if (qParams) {
....
}
}

优点是参数始终被命名,并且您不必记住确切的顺序以及在调用方法时为可选参数插入多少个空值。

关于typescript - 在 TypeScript 参数签名中处理潜在的空参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41483758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com