【发布时间】:2021-11-14 05:32:15
【问题描述】:
我有以下示例代码:
type GetMultipleFunction1 = () => Promise<string[]>;
type GetMultipleFunction2 = (data: number) => Promise<string[]>;
type GetMultipleFunction = GetMultipleFunction1 | GetMultipleFunction2;
function test(func: GetMultipleFunction): Promise<string[]> {
return func();
}
function getStrings(data: number): Promise<string[]> {
return new Promise(function (resolve, reject) {
resolve(['hello', 'hi']);
}) }
test(getStrings);
为什么会出现错误(return func() 的第 6 行):
预期 1 个参数,但得到 0 个。
我觉得 GetMultipleFunction 可以是类型 1 或类型 2。类型 1 不需要参数。
如何更改我的代码以消除警告?
--
编辑:我想要实现的目标:
我基本上想要一个接受函数作为参数的函数。在我的例子中test。它应该接受一个带参数的函数和一个不带参数的函数。这可能吗?
代码示例:
type GetMultipleFunction1 = () => string[];
type GetMultipleFunction2 = (data: number) => string[];
export type GetMultipleFunction = GetMultipleFunction1 | GetMultipleFunction2;
function test(func: GetMultipleFunction, data?: number): string[] {
if (data) return func(data);
return func() // here should be no warning
}
function getStrings1(data: number): string[] {
return [`hello-${data}`, 'hi'];
}
function getStrings2(): string[] {
return ['hello', 'hi']
}
test(getStrings1, 2);
test(getStrings2);
--
我想要实现的更具体的解释:我正在使用 Vue3 组合函数来提取 Get 请求。通常我可以直接调用:/api/groups/,但有时我需要将参数传递给我的 get 请求函数:/api/groups/3/members/ 现在需要将数字 3 作为参数传递。
【问题讨论】:
-
为什么要使用多种类型?只需
dataoptional -
嗯,我想过,但后来我得到另一个错误:键入'number | undefined' 不可分配给类型 'number'。在 test(getStrings) 的最后一行。见:typescriptlang.org/play?#code/…
-
一般来说,只要没有出现其他错误,我就可以接受可选的数据。
-
test的目的是什么?现在在我看来,这个错误是完全有效的:你正在调用func,但没有传入func需要的数据。因此,修复它的两种可能方法是:1)传入它需要的数据,或者 2)重写一些东西,使它不需要数据。但我不知道如何建议你,因为我不明白代码的目的。 -
使
data在getStrings以及typescriptlang.org/play?#code/… 中成为可选的
标签: typescript