gpt4 book ai didi

typescript - 根据具有默认值的参数返回 Promise 或 boolean 值

转载 作者:行者123 更新时间:2023-12-04 09:18:09 27 4
gpt4 key购买 nike

我有一些代码会根据参数返回 boolean 值或 Promise。

function setGuid<B extends boolean>(guid: string, shouldValidate?: B): B extends true ? boolean : Promise<boolean>
function setGuid(guid: string, shouldValidate?: boolean): boolean | Promise<boolean> {
if (shouldValidate){
return true
}
return Promise.resolve(true);
}

此功能有效。如果我调用 setGuid("*", false)它知道返回类型将是 Promise<boolean>同样如果我调用setGuid("*", true) TypeScript 理解返回类型将是 boolean .

问题是我不知道如何设置默认返回类型,即 Promise<boolean>如果未提供 shouldValidate(可选参数)——我希望 TypeScript 理解 setGuid("*")将返回 Promise<boolean> .目前,如果我不明确提供 false作为它认为的第二个参数 boolean | Promise<boolean>正在返回。

我在调用 setGuid("*") 时遇到的错误是Property 'then' does not exist on type 'boolean | Promise<boolean>'. Property 'then' does not exist on type 'false'.

任何帮助将不胜感激,谢谢!

最佳答案

如果您不以 shouldValidate 形式传递任何内容, 那么编译器就没有什么可以用来推断 B 的类型了.因此,它将倾向于默认其约束,即 boolean。 .自 B extends true ? boolean : Promise<boolean> 以来,这表现不佳将成为联盟boolean | Promise<boolean> ,如您所见。

在这种情况下,您可以添加 generic parameter default到重载调用签名,如下所示:

function setGuid<B extends boolean = false>(
guid: string,
shouldValidate?: B
): B extends true ? boolean : Promise<boolean>;

如果编译器无法以其他方式推断出 B,则将使用此默认值:

setGuid("*").then(x => x ? 0 : 1); // no error now

好的,希望对你有帮助;祝你好运!

Playground link to code

关于typescript - 根据具有默认值的参数返回 Promise 或 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63144870/

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