打字稿-版本:1.6打字稿上基本字符串類型重載方法
我想添加另一個重載函數爲String
小號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 Type'(searchV alue:string,replaceValue:any)=> string'不可分配給類型'{(searchValue:string,replaceValue:string):string; (searchValue:string,replacer:(substring ...') 參數'searchValue'和'searchValue'的類型不兼容 類型'string'不能分配給'RegExp'類型 'exec'缺少鍵入 '字符串'
編輯#1
我結束了剛剛聲明replace
(和實施的消除方法),以滿足編譯器:
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
功能?
編輯#2
如果使用沒有自己的Visual Studio大喊大叫
隨着投它顯示(ReSharper的)與實例4.1(
MartyIX)
所以,我不知道打字稿什麼,但我看不出有什麼這個方法做,你已經不能用'String.prototype.replace'做什麼? – Mathletics
似乎TS函數對參數類型不變,而'f(string,any)'不能保存爲'f(string,string)'類型的值。 –
@Mathletics它在編譯時得到了一個錯誤,因爲在typescript中沒有'replace(string,any)的定義' – KingKerosin