Typescript 1.7+ Как добавить функцию прототипа String?

Кто-нибудь знает, как расширить базовый класс в Typescript 1.7. Что-то вроде этого примера в JS:

String.prototype.foo = function() {
    return 'Bar';
}

Я нашел много способов сделать это в старых версиях Typescript, например:

interface String {
    foo(): string;
}

String.prototype.foo= function() {
    return 'Bar';
}

or

interface StringConstructor {
    foo(): string;
}

String.foo = function() {
    return 'Bar';
}

Я пробовал много способов сделать это, но всегда получаю ошибку при компиляции TS!

Спасибо

Фелипе


person Exdcarca    schedule 08.12.2015    source источник
comment
Возможный дубликат вопрос.   -  person Nypan    schedule 08.12.2015
comment
Вы используете внешние модули? Какую ошибку вы получаете? Если вы используете внешние модули, вам нужно переместить интерфейс в файл определения.   -  person David Sherret    schedule 08.12.2015
comment
Вы правы, Дэвид.. Спасибо!!   -  person Exdcarca    schedule 09.12.2015


Ответы (1)


Следующее все еще работает in действие:

interface String {
    foo(): string;
}

String.prototype.foo= function() {
    return 'Bar';
}

Вы, вероятно, имеете его в внешнем модуле, который отключает его от глобального контекста. Подробнее об этом: https://basarat.gitbooks.io/typescript/content/docs/types/lib.d.ts.html

person basarat    schedule 08.12.2015
comment
Уникальная хитрость заключается в том, что определение интерфейса должно находиться в файле определения. - person Exdcarca; 09.12.2015
comment
Он работает, но выдает следующую ошибку: TS2339: Property 'foo' does not exist on type 'String' в typescript 1.8 - person Serginho; 15.09.2016