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 withunknown
是愚蠢的。我实际上想要一个对象,所以我将它改为string | Record
getCall('abc'); // ok
getCall(123); // ok
const getCall : XhrCaller = (pathParam: string) => new Promise((resolve, reject) => {
resolve({ test: 'test' });
});