gpt4 book ai didi

typescript - 如何为可能使用 1 个或 2 个参数调用的函数定义重载签名?

转载 作者:行者123 更新时间:2023-12-05 05:42:37 24 4
gpt4 key购买 nike

我正在尝试为可能使用 1 个或 2 个参数调用的函数定义签名,但我收到一个错误,即具有 2 个参数的函数的类型无法分配给我定义的类型。

我定义的类型:

type Response = {
status: string;
result: object;
}

export interface CallbackFunction {
(response: Response): void;
(error: Error | null, response?: Response): void;
}

// Example code to get the error

// OK
// res: Response | Error | null
export const fn: CallbackFunction = (res) => {
// ...
};

// Error
// Type '(err: Error | null, res: Response | undefined) => void' is not assignable to type 'CallbackFunction'.
export const fn2: CallbackFunction = (err, res) => {
// ...
};

// Error
// Argument of type '{ status: string; result: {}; }' is not assignable to parameter of type 'Error'
fn({ status: 'Test', result: {} })

如果我没有明确使用超时选项,我正在使用的库只用一个参数调用这个函数,否则它用两个参数调用它,第一个将在超时时出错,否则第二个将是 null参数是结果。

我知道这不是最好的设计,但我无法更改代码,它是第三方库。

最佳答案

您应该补充说,第一个重载不需要这样的第二个参数,并使其可选以匹配第二个重载:

export interface CallbackFunction {
(response: ExampleResponse, _?: never): void;
(error: Error | null, response?: ExampleResponse): void;
}

然后它会像你在这里看到的那样完美地工作:

Playground

关于typescript - 如何为可能使用 1 个或 2 个参数调用的函数定义重载签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72000248/

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