gpt4 book ai didi

typescript - 如何将 typescript 泛型限制为两个原语之一?

转载 作者:行者123 更新时间:2023-12-04 12:16:07 24 4
gpt4 key购买 nike

我正在编写一个函数,该函数通过查找元素的参数列表运行。如果找到,该函数将删除名称并返回值,如果不存在,则返回默认值。值将是 numberstring 。我想要一种使用 typescript 泛型和约束来编译以下内容的方法。

function GetValue<T extends number | string>(datum: string, element: string, defaultValue: T): T {
if (datum.startsWith(element)) {
if (typeof defaultValue === 'number')
return parseInt(datum.substring(element.length)); // error
else if (typeof defaultValue === 'string')
return datum.substring(element.length); // error
}
return defaultValue;
}
我已经排除了任何错误检查代码,例如来自 parseInt 。这将被称为;
console.log(GetValue("abc123", "abc", 456));
console.log(GetValue("abc123", "def", 456));
并期望得到 123456
目前,它在 // error 行上失败,因为可以使用扩展 stringnumber 但不是 stringnumber 的类型调用该函数。
我如何约束通用 T 使其仅限于 stringnumber (而不是联合 string | number ),然后返回类型与 defaultValue 的类型匹配?

最佳答案

将显式转​​换为 T,以消除此错误

function GetValue<T extends number | string>(datum: string, element: string, defaultValue: T): T {
if (datum.startsWith(element)) {
if (typeof defaultValue === 'number')
return parseInt(datum.substring(element.length)) as T;
else if (typeof defaultValue === 'string')
return datum.substring(element.length) as T;
}
return defaultValue;
}
有一个 issue在讨论此主题的 github 上打开。

关于typescript - 如何将 typescript 泛型限制为两个原语之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64902115/

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