Ошибка компиляции TypeScript — Не удалось выбрать перегрузку для выражения ‘call’- RegExp.test

#javascript #typescript

#javascript #typescript

Вопрос:

Это странная ошибка, которую я получаю при компиляции небольшого кода, соответствующего регулярному выражению-

Код —

 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'»

Комментарии:

1. Компилятор не может угадать тип элемента? Заменить function(item) на (item: string) =>

2. Да, исправлено с помощью — var str = item «»; возвращает regExp.test(str);

Ответ №1:

Я создал этот упрощенный пример на TypeScript Playground:

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

Поскольку item невозможно определить, оно имеет any тип. Игровая площадка без проблем принимает аргумент типа any для метода тестирования регулярных выражений.

Это означает, что вы могли вызвать example функцию со следующим:

 example({ this: 'works'});
  

Нет смысла разрешать вызовы буквально с любым типом, поэтому, аннотируя параметр, вы можете предотвратить такого рода аварии:

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

Предыдущий вызов, передавший объект, теперь будет выделен как неправильный.