Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript TS函数变量args类型问题_Typescript - Fatal编程技术网

Typescript TS函数变量args类型问题

Typescript TS函数变量args类型问题,typescript,Typescript,我已声明此接口: interface XhrCaller { (...args: (string|unknown)[]): Promise<Record<string, unknown>> } 接口XhrCaller{ (…args:(字符串|未知)[]):承诺 } 当我继续定义一个getfn like const getCall:XhrCaller=(pathParam:string)=>新承诺((解析、拒绝). 我得到一个错误,上面写着 Type'(pat

我已声明此接口:

interface XhrCaller {
    (...args: (string|unknown)[]): Promise<Record<string, unknown>>
}
接口XhrCaller{
(…args:(字符串|未知)[]):承诺
}
当我继续定义一个
get
fn like

const getCall:XhrCaller=(pathParam:string)=>新承诺((解析、拒绝).

我得到一个错误,上面写着


Type'(pathParam:string)=>Promise因为您已经为
XhrCaller
声明了类型,所以不必对
pathParam
TypeScript进行注释,因为您已经知道它的类型是
string |未知

链接到

另外,您确实声明了联合类型,但当您应用像
getCall(123)
这样的值时,它用于检查类型,而不是在您声明时

您的示例基本上声明了另一个类型
(pathParam:string)=>Promise
,它与
XhrCaller

const getCall : XhrCaller = (pathParam: string) => new Promise((resolve, reject) => {
    resolve({ test: 'test' });
});

XhrCaller
的目的是什么?为什么要用任何东西注释
aFunction
?您的
aFunction
只能接受
string
,但是
XhrCaller
需要能够接受任意数量的任何类型的参数。这些参数不兼容。但是我不确定是否要告诉您更改
aFunction
、更改
XhrCaller
、或更改其他内容。它是一种未知类型,无法分配给字符串类型,这会破坏您的代码。它可以与任何字符串类型一起使用。有关@jcalz的详细信息,请阅读:@jcalz该接口将用于多个函数,这些函数都具有类似的类型,因此是此通用接口。让我更新我的问题,使m或者我说的意思。@CodeMonkey,但我正在创建一个联合体。这行得通吗?你能为某种目的使用多个函数的代码做一个分析吗?大概你关心使用
XhrCaller
的唯一原因是有什么东西会接受
XhrCaller
类型的值并调用它们。让我们来看看看到其中一些,我可以提出建议。为了安全地调用函数,它们的参数类型必须是逆变的(请参阅)所以你需要小心。就是这样。10分钟前我正要发布同样的发现,但你在解释方面做得更好,所以我很高兴我没有继续努力:DUnion with
unknown
是愚蠢的。我实际上想要一个对象,所以我将它改为
string | Record
getCall('abc'); // ok
getCall(123); // ok
const getCall : XhrCaller = (pathParam: string) => new Promise((resolve, reject) => {
    resolve({ test: 'test' });
});