Строка прототипа с машинописным текстом

#typescript

#typescript

Вопрос:

Следующий метод прототипа для строки JavaScript в Typescript 2.0.3:

 interface String {
    splice(start: number, delCount: number, newSubStr: string): string;
}

String.prototype.splice = function(idx: number, rem: number, str: string): string {
    return this.slice(0, idx)   str   this.slice(idx   Math.abs(rem));
};
  

выдает ошибку:

ошибка TS2339: свойство ‘splice’ не существует для типа ‘String’.

несмотря на мой интерфейс. Кажется, он отлично работает на игровой площадке. Я просто запускаю tsc этот файл без каких-либо параметров. Почему это не работает?

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

1. Я запустил tsc ( 2.0.3 и 1.8.10 ) файл, содержащий только ваш код, и он отлично работал. Вы уверены, что это все?

Ответ №1:

Кажется, он отлично работает на игровой площадке.

Это потому, что у вас, вероятно, есть import / export в вашем файле. Исправить:

 declare global {
    interface String {
        splice(start: number, delCount: number, newSubStr: string): string;
    }
}

String.prototype.splice = function(idx: number, rem: number, str: string): string {
    return this.slice(0, idx)   str   this.slice(idx   Math.abs(rem));
};
  

Еще

Это рассматривается здесь : https://basarat.gitbooks.io/typescript/content/docs/types/lib.d.ts.html#modifying-native-types