Расширение функциональности в TypeScript [дубликат]
Возможный дубликат:
Как прототип распространяется на машинопись?
В настоящее время я изучаю TypeScript и хотел бы знать, как можно добавить функциональность к существующим объектам. Скажем, я хочу добавить реализацию Foo к объекту String. В JavaScript я бы сделал это:
String.prototype.Foo = function() {
// DO THIS...
}
Понимание того, что классы, интерфейсы и модули TypeScript являются открытыми, заставило меня попробовать безуспешно
1. Ссылка на реализацию JavaScript из TypeScript
JavaScript:
String.prototype.Foo = function() {
// DO THIS...
}
TypeScript:
var x = "Hello World";
x.Foo(); //ERROR, Method does not exist
2. Расширить интерфейс
interface String {
Foo(): number;
}
var x = "Hello World";
x.Foo(); //Exists but no implementation.
3. Расширить класс
class String {
Foo(): number {
return 0;
}
}
// ERROR: Duplicate identifier 'String'
Как вы можете видеть из этих результатов, до сих пор я был в состоянии добавить метод через интерфейсный контракт, но без реализации, поэтому, как мне определить и реализовать мой метод Foo как часть ранее существующего класса String?