参数中rest参数上的Typescript类型
是否可以根据传递的函数的签名告诉typescript rest参数的类型参数中rest参数上的Typescript类型,typescript,Typescript,是否可以根据传递的函数的签名告诉typescript rest参数的类型 function myFunc(a: string, b: number) { /* ... */ } function callFn(passedFn: (args...: any[]), ...args: any[]) { passedFn(...args) } callFn(myFunc, 1, 2) // should be a warning 下面的代码显示您得到了编译错误,因为您将失去args下的类型
function myFunc(a: string, b: number) { /* ... */ }
function callFn(passedFn: (args...: any[]), ...args: any[]) {
passedFn(...args)
}
callFn(myFunc, 1, 2) // should be a warning
下面的代码显示您得到了编译错误,因为您将失去args下的类型控制
interface ICallback
{
(a: string, b: number): void
}
class Test
{
public CallFn(passedFn: ICallback, ...args: any[]): void
{
passedFn(args); // error
passedFn("1", 2);
}
}
class Callback
{
public MyFunction = (a: string, b: number) =>
{
alert("it's working");
}
}
let testIntance = new Test();
let callbackIntance = new Callback();
testIntance.CallFn(callbackIntance.MyFunction, 1, 2);
您必须处理异常并尝试解析为类型化变量
class Test
{
public CallFn(passedFn: ICallback, ...args: any[]): void
{
//passedFn(args); // error
let hasTwoArguments = args && args.length && args.length === 2;
if(!hasTwoArguments)
{
return;
}
let firstArgument: string = args[0];
let secondArgument: number = parseInt(args[1]);
passedFn(firstArgument, secondArgument);
}
}
请参见下面的代码,它显示了编译错误,因为您将失去args下的类型控制
interface ICallback
{
(a: string, b: number): void
}
class Test
{
public CallFn(passedFn: ICallback, ...args: any[]): void
{
passedFn(args); // error
passedFn("1", 2);
}
}
class Callback
{
public MyFunction = (a: string, b: number) =>
{
alert("it's working");
}
}
let testIntance = new Test();
let callbackIntance = new Callback();
testIntance.CallFn(callbackIntance.MyFunction, 1, 2);
您必须处理异常并尝试解析为类型化变量
class Test
{
public CallFn(passedFn: ICallback, ...args: any[]): void
{
//passedFn(args); // error
let hasTwoArguments = args && args.length && args.length === 2;
if(!hasTwoArguments)
{
return;
}
let firstArgument: string = args[0];
let secondArgument: number = parseInt(args[1]);
passedFn(firstArgument, secondArgument);
}
}
请看你能解释一下你想做什么吗?忘记语法,告诉我们你的理由/特点你能解释一下你想做什么吗?忘记语法,告诉我们你的理由/特点是什么