【问题标题】:TypeScript Compile Error- Could not select overload for 'call' expression- RegExp.testTypeScript 编译错误-无法为“调用”表达式选择重载-RegExp.test
【发布时间】:2014-07-04 06:05:26
【问题描述】:

这是我在编译小型正则表达式匹配代码时遇到的奇怪错误-

代码-

var regExp = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i");
response($.grep(modelState.Options, function (item) {
    return regExp.test(item);
}));

当我看到这个“接口正则表达式”的打字稿定义时

我可以看到那里的测试方法-

test(string: string): boolean;

谁能建议我解决这个错误 - “TypeScript 编译错误 - 无法为 'call' 表达式选择重载”

【问题讨论】:

  • 编译器无法猜测项目的类型?将function(item) 替换为(item: string) =>
  • 是的 - var str = item + ""; return regExp.test(str);

标签: javascript typescript


【解决方案1】:

我在 TypeScript Playground 上创建了这个简化示例:

function example(item) {
    var regExp = /[0-9]/;
    return regExp.test(item);
}

因为item 无法推断,所以它具有any 类型。 Playground 在接受 any 类型的参数到正则表达式测试方法时没有问题。

这意味着您可以使用以下代码调用example 函数:

example({ this: 'works'});

允许使用任何类型的调用几乎没有意义,因此通过注释参数可以防止这种意外:

function example(item: string) {
    var regExp = /[0-9]/;
    return regExp.test(item);
}

之前传递对象的调用现在将突出显示为不正确。

【讨论】:

    猜你喜欢
    • 2015-08-26
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 2014-06-02
    • 2015-03-10
    • 1970-01-01
    • 2021-12-26
    • 2017-12-11
    相关资源
    最近更新 更多