Typescript 我可以使用参数<;T>;懒洋洋地键入我的…args参数?

Typescript 我可以使用参数<;T>;懒洋洋地键入我的…args参数?,typescript,parameters,Typescript,Parameters,我想使用另一个函数为接口运行方法(这样我可以在执行过程中提供一些上下文信息)。我希望我可以让Typescript使用参数实用程序类型为我完成繁重的工作。。。但我似乎无法让它发挥作用 以下是简化的情况: 接口存储{ 读取(键:字符串):字符串 写入(键:字符串,数据:字符串):布尔值 } 函数运行(存储:存储,作业:T,…参数:参数){ 返回存储区[作业](…参数); } 错误是: (parameter) args: Parameters<Store[T]> Expected 2

我想使用另一个函数为接口运行方法(这样我可以在执行过程中提供一些上下文信息)。我希望我可以让Typescript使用
参数
实用程序类型为我完成繁重的工作。。。但我似乎无法让它发挥作用

以下是简化的情况:

接口存储{
读取(键:字符串):字符串
写入(键:字符串,数据:字符串):布尔值
}
函数运行(存储:存储,作业:T,…参数:参数){
返回存储区[作业](…参数);
}
错误是:

(parameter) args: Parameters<Store[T]> 
Expected 2 arguments, but got 0 or more.
temp.ts(3, 11): An argument for 'key' was not provided.
(参数)参数:参数
应为2个参数,但得到0个或更多。
临时ts(3,11):未提供“key”的参数。
有人知道我可以如何做到这一点,而不必手工编写
运行
的所有函数签名吗?我对打字脚本有点陌生,一定是遗漏了什么



另外,vscode可以正确地判断这些用法是如何错误的:

TypeScript以一种没有帮助的方式解决查找问题。如果检查
store[job]
的类型,您会得到:

const func = store[job];

// Hover func here => const func: (key: string, data: string) => string | boolean;
return func(...args);
所以它只是合并了所有的函数签名,这就把调用搞砸了

正如你所知,这应该是正确的,我建议告诉TS闭嘴,如果没有合适的话,可能会提交一份新的。也许这是一个可以修复的bug,也许这是一个将继续存在的限制

function run<T extends keyof Store>(store: Store, job: T, ...args: Parameters<Store[T]>)
    : ReturnType<Store[T]> {
    // @ts-expect-error
    return func(...args);
}
函数运行(存储:存储,作业:T,…参数)
:返回类型{
//@ts预期错误
返回函数(…参数);
}