TypeScript中Supplied parameters do not match any signature的错误

2019-04-29171次阅读TypeScript

函数实现签名,它并不是重载的一部分:

function createLog(message: string): number;
function createLog(source: string, message?: string): number {
  return 0;
}

createLog('message'); // OK
createLog('source', 'message'); // ERROR: Supplied parameters do not match any signature

当至少具有一个函数重载的签名时,只有重载是可见的。最后一个声明签名(也可以被称为签名的实现)对签名的形状并没有贡献,因此,要获得所需的行为,你需要添加额外的重载:

function createLog(message: string): number;
function createLog(source: string, message: string): number;
function createLog(source: string, message?: string): number {
  return 0;
}

由于 JavaScript 没有函数重载,我们不得不这么做,因此你需要在你的函数中进行参数检查。

例如,你可以要求你的使用者使用匹配的参数对来调用,并正确实现它,而不允许混合参数类型。

function compare(a: string, b: string): void;
function compare(a: number, b: number): void;
function compare(a: string | number, b: string | number): void {
  // Just an implementation and not visible to callers
}

compare(1, 2); // OK
compare('s', 'l'); // OK
compare(1, 'l'); // Error.

 

上一篇: TypeScript中函数参数的类型推断  下一篇: CSS3图像动画并显示图像后面的文本  

TypeScript中Supplied parameters do not match any signature的错误相关文章