gpt4 book ai didi

基于字符串参数的 typescript 条件返回类型

转载 作者:行者123 更新时间:2023-12-04 01:12:49 26 4
gpt4 key购买 nike

当使用字符串文字的并集作为输入参数时, 需要什么?删除强制转换并将类型放入函数头 :

const get = <T extends "barcode" | "mqtt">(s: T) =>
s === "barcode" ?
<T extends "barcode" ? {scan: () => string} : {pan: () => string}>{scan: () => "we are scanning"} :
<T extends "barcode" ? {scan: () => string} : {pan: () => string}>{pan: () => "we are panning"}

get("barcode").scan() // OK
get("mqtt").pan() // OK
get("barcode").pan() // Error

我在试图回答别人的问题时遇到了这个问题: https://stackoverflow.com/a/55059318/2684980 .

最佳答案

最干净的解决方案是使用重载代替这种情况(尽管没有比类型断言更安全的类型)。您可以在公共(public)签名中使用条件类型,并在实现签名中使用简单的联合。您需要切换到函数声明,因为函数表达式(箭头或正则)不容易支持重载:

function get<T extends "barcode" | "mqtt">(s: T): T extends "barcode" ? { scan: () => string } : { pan: () => string }
function get(s: "barcode" | "mqtt"): { scan: () => string } | { pan: () => string } {
return s === "barcode" ?
{ scan: () => "we are scanning" } :
{ pan: () => "we are panning" }
}

get("barcode").scan() // OK
get("mqtt").pan() // OK
get("barcode").pan() // Error

关于基于字符串参数的 typescript 条件返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55059436/

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