【发布时间】:2019-08-02 09:45:47
【问题描述】:
如何使用 TypeScript 3.2 定义动态强类型的剩余参数? 这是我的用例:
function exec<T, P extends ICommandNameArgumentTypeMapping, E extends keyof P, U extends P[E]>(command: E, ...rest: U): U{
return;
}
exec('cmd2', true, 1, 'hello');
interface ICommandNameArgumentTypeMapping {
['cmd1']: [string];
['cmd2']: [boolean, number, string];
['cmd2']: [boolean, boolean];
}
此时似乎一切正常。
当用cmd2 为exec 编写参数时,我可以看到编译器(打字稿)提供了3 个参数的输入信息。
返回值也是正确的……
但是,在包含声明 ...rest: U 的其余参数的行中,事情发生了变化。
错误很简单:
A rest parameter must be of an array type.
【问题讨论】:
标签: typescript typescript-generics