【发布时间】:2021-11-01 09:35:49
【问题描述】:
想象一下我的要求的简化版本:我将一个项目数组传递给一个函数、一个回调以及我想从数组中弹出多少个项目。回调将获取该数量的项目。
如果弹出计数设置为1,我希望该回调仅接收该单个项目。如果是来自1 的任何其他内容,我希望它将一个数组传递给回调。
我不确定在 TypeScript 中是否可行。我一直在玩,但没有成功。这是我想出的(但不起作用):
function pop<T>(items: T[], cb: (item: T) => void, count: 1): void;
function pop<T>(items: T[], cb: (item: T[]) => void, count: undefined): void;
function pop<T>(items: T[], cb: (item: T[]) => void, count: number): void;
function pop<T>(
items: T[],
cb: ((item: T) => void) | ((item: T[]) => void),
count = 1,
): void {
if (count === 1) {
cb(items[0]);
} else if (count > 1) {
cb(items.slice(0, count));
} else {
cb([]);
}
}
谁能告诉我这是否可能?还是我错过了什么?
【问题讨论】:
-
重载是针对调用者的;在实际实现中
cb不是有条件类型的,它始终是((item: T) => void) | ((item: T[]) => void)。请注意,您可以将第二个和第三个重载压缩为count?: number。