【发布时间】:2021-06-16 18:05:37
【问题描述】:
在my question 之后,我现在面临返回类型重载的问题。
interface A {
a: number,
b: string
}
function myFunc(...sIs: Array<number>): Map<number, A[]>;
function myFunc(sIs: Array<number>): Map<number, A[]>;
function myFunc(s: Array<number> | number, ...sIs: Array<number>): A | Map<number, A[]> {
}
我正在重载函数,所以当只有一个参数(即myFunc(1))时,返回值是单个数据¿或未定义?,而如果输入是一个数组,它会返回一个基于函数参数的映射。
我面临的问题是Conversion of type 'Map<number, A[]>' to type 'A' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
如果我不包含 undefined 作为潜在的返回值,我已经设法通过以下方式解决问题:
const info: any = await myFunc(5);
const snfo: A = info as A;
但是如果我包含像A | Map<number, A[]> | undefined 这样的返回值,就没有办法做到这一点。我知道简单的方法是始终返回 Map,但我想学习如何正确地做到这一点。
【问题讨论】:
-
<Map<number, A[]>(第一个签名上的返回类型注释)是什么意思?此外,您的实现签名将A作为其可能的返回类型之一,但您的重载都没有...? -
重载的返回类型与实现的返回类型不匹配。其中之一必须返回 A 或者您的实现必须只返回地图类型。
-
@T.J.Crowder 我修正了它......这是一个错字
-
@Silvermind 这就是重点。如果输入参数只是一个单数,我想返回 A ,但如果输入参数是数组或数字序列,我想返回 Map 。这可能吗?
-
b的值从何而来?
标签: typescript return overloading