Как использовать конструктор строк в typescript 2

StringConstructor работает в Typescript 1.8:

interface StringConstructor {
    trim(msg: string): string;
}
String.trim = function (msg: string) {
                if (msg)
                    return msg.trim();
                return msg;
            }
 String.trim("Url)

но не работает в Typescript 2, и я получаю сообщение об ошибке:

Свойство "trim" не существует для типа "StringConstructor".


person Hossein Hagh    schedule 09.11.2016    source источник
comment
Этот код, если его скопировать на площадку и запустить в консоли, работает хорошо.   -  person Nitzan Tomer    schedule 09.11.2016
comment
Свойство 'trim' определено выше для типа 'String'.   -  person Roy Dictus    schedule 09.11.2016


Ответы (1)


Попробуй это:

 module String {
  export function trim(msg: string): string {
    if (msg)
      return msg.trim();
    return msg;
  }
}
String.trim("Url")

(Обратите внимание, что вы пропустили закрывающую кавычку строки)

Объяснение Вкратце: TypeScript выполняет так называемое слияние объявлений, что объясняется в документах< /а>.

Для получения дополнительной информации см. ответ Джеффри.

person yuval.bl    schedule 09.11.2016
comment
Это кажется перебором. Зачем использовать этот подход, когда есть более простой, такой как тот, который пытается использовать ОП? - person Nitzan Tomer; 09.11.2016
comment
Я не мог заставить этот подход работать с моим компилятором Typescript 2. Хотелось бы увидеть рабочие примеры этого подхода :) Например - это должно быть рабочим примером, но не прошло мой компилятор. - person yuval.bl; 13.11.2016
comment
Код в ответе, который вы связали, отлично работает на игровой площадке, как и код, опубликованный OP. - person Nitzan Tomer; 13.11.2016
comment
Я видел это раньше. Я не уверен, какую игровую площадку использует компилятор машинописного текста/версия. Я проверил это локально, используя версии 2.0.6 и 2.0.8, и получил те же ошибки, что и @Hossein. Другими словами, хотя вы и правы, я не вижу, как это поможет решить проблему. - person yuval.bl; 15.11.2016
comment
Вы пробовали поместить его в declare global { ... }? - person Nitzan Tomer; 15.11.2016
comment
Нет, можете ли вы добавить пример этого? - person yuval.bl; 16.11.2016
comment
declare global { interface StringConstructor { ... } }, а затем String.trim = .... Документации по этому поводу немного, но кое-что можно посмотреть в Глобальное увеличение. - person Nitzan Tomer; 16.11.2016
comment
Отлично, я посмотрю на это. Спасибо! - person yuval.bl; 23.11.2016