Машинопись-Version: 1.6машинопись метод перегрузки на базовый тип строки
Я пытаюсь добавить еще одну перегрузочную-функцию для String
s replace
-функции, которая должна иметь следующую подпись:
replace(searchValue: string, replaceValue: any): string;
Поэтому он может быть использован как
"someString".replace("replaceMe", $(evt.target).data("row-id"))
мне нужно any
от .data
определяется как:
data(key: string): any;
Мой String.d.ts
(объявление)
interface String {
/**
* Replaces text in a string, using a regular expression or search string.
* @param searchValue A string that represents the regular expression.
* @param replaceValue A string containing the text to replace for every successful match of searchValue in this string.
*/
replace(searchValue: string, replaceValue: any): string;
}
Мой String.ts
(реализация)
String.prototype.replace = (searchValue: string, replaceValue: any):string =>
{
if (replaceValue instanceof String) {
var stringReplacement = replaceValue.toString();
return String.prototype.replace(stringReplacement, replaceValue);
} else {
return replaceValue;
}
}
Следующая ошибка возникает, и я не знаю, почему и как это можно исправить:
Ошибка TS2322 Тип '(searchV alue: string, replaceValue: any) => string 'не присваивается типу' {(searchValue: string, replaceValue: string): string; (searchValue: string, replacer: (substring ... '. Типы параметров «searchValue» и «searchValue» несовместимы. Тип «строка» не может быть присвоен типу «RegExp». Свойство «exec» отсутствует в типа 'String'
Редактировать # 1
Я в конечном итоге только с декларацией за replace
(и removement реализации), чтобы удовлетворить компилятор:.
interface String {
/**
* Replaces text in a string, using a regular expression or search string.
* @param searchValue A string that represents the regular expression.
* @param replaceValue A string containing the text to replace for every successful match of searchValue in this string.
*/
replace(searchValue: string, replaceValue: any): string;
}
Является ли это по-прежнему неправильным, поскольку он по-прежнему вызывает функцию replace
-функцию библиотеки?
Edit # 2
Если ничего не используя собственный Visual Studio орет
С броском он показывает (ReSharper)
С примера 4.1 (MartyIX)
Так что, я ничего не знаю о машинописи знаю, но я не вижу, что делает этот метод, который вы не можете уже делать с 'String.prototype.replace'? – Mathletics
Кажется, что функции TS являются инвариантными по типам параметров, а 'f (string, any)' не могут быть сохранены в значение типа 'f (string, string)'. –
@Mathletics это ошибка во время компиляции, так как в машинописном тексте нет определения для 'replace (string, any)' – KingKerosin