gpt4 book ai didi

typescript - 根据类型保护推断函数的返回类型

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

我有以下定义:

function foo(arg: number[] | number) {
if (Array.isArray(arg)) {
return [1]
}

return 0
}

我希望 typescript 能够自动确定返回类型是什么。由于类型保护 isArray(),它知道 arg 是否为数组,并且可以将返回类型显示为 number[]。但是,使用 foo(...) 将其返回值显示为 number[] | 0 即使在传递数组时也是如此。

  foo([]).push() // error because push doesnt exist on type 0

这是设计限制、错误、尚未实现还是其他问题?

最佳答案

我不能明确指出这是设计限制,但我见过像 jcalz 这样的专家。和 Titian Cernicova-Dragomir引用类型推断受限的各种地方,有时不是因为它不能做我们想要的,而是因为这样做的成本太高(就运行时成本或编译器中的代码复杂性而言)。我怀疑这属于该类别。

您可能知道这一点,但对于您的具体示例,您可以使用重载来获得您想要的结果:

function foo(arg: number[]): number[];
function foo(arg: number): number;
function foo(arg: number[] | number) {
if (Array.isArray(arg)) {
return arg.map(v => v * 2);
}

return arg * 2;
}
foo([]).push(10);

Playground link

关于typescript - 根据类型保护推断函数的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64087763/

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