Я хочу расширить прототип String
, добавив метод .trimSlashes()
для стирания слешей с любого конца строки; Я не могу заставить его выполнить замену на месте (вместо того, чтобы требовать возврата строки, просто измените собственную строку при вызове), но это будет другой проблемой.
Я использую TypeScript версии 3.8. 3.
Итак, у меня есть файл trimSlashes.ts :
import * as fs from "fs";
interface String {
trimSlashes(this: string) : string;
}
String.prototype.trimSlashes = function (this : string) : string {
var str = this;
if (str.startsWith("/")) {
str = str.replace(/^\/+/, "")
}
if (str.endsWith("/")) {
str = str.replace(/\/+$/, "");
}
return str;
}
let test = "//myTest/";
console.log("Original string: " + test);
test.trimSlashes();
console.log("Trimmed slashes: " + test);
console.log("File or directory exists: " + fs.existsSync(test));
Я добавил контекст fs
, так как это требовалось для вызова ошибки, когда компилятор прекращает разбирать, жалуясь, что Property 'trimSlashes' does not exist on type 'String'.
. Без кода fs
он собирается и запускается NodeJS.
Дополнительные примечания
Есть несколько подобных вопросов, но, похоже, никто не задает вопрос о версии 3.8 и всех ответах, которые я смог найти не применимо.
Я попытался создать отдельный файл .d.ts, включив его в исходный код, и теперь я пытаюсь сделать то, что считаю самым простым: объявить все в одном файле. Я не возражаю против наличия файла .d.ts
, если требуется, но я просто не могу заставить его работать.