javascript - traductor - Funcionalidad extendida en TypeScript
typescript tutorial pdf (1)
He encontrado la solución. Se necesita una combinación de la interfaz y la implementación de JavaScript. La interfaz proporciona el contrato para TypeScript, lo que permite la visibilidad del nuevo método. La implementación de JavaScript proporciona el código que se ejecutará cuando se llame al método.
Ejemplo:
interface String {
foo(): number;
}
String.prototype.foo= function() {
return 0;
}
A partir de TypeScript 1.4 ahora también puede extender miembros estáticos:
interface StringConstructor {
bar(msg: string): void;
}
String.bar = function(msg: string) {
console.log("Example of static extension: " + msg);
}
Posible duplicado:
¿Cómo se extiende el prototipo en mecanografiado?
Actualmente estoy aprendiendo TypeScript y me gustaría saber cómo es posible agregar funcionalidad a los objetos existentes. Supongamos que quiero agregar una implementación para Foo al objeto String. En JavaScript, haría esto:
String.prototype.Foo = function() {
// DO THIS...
}
Entender que las clases, interfaces y módulos de TypeScript son de final abierto me llevó a probar lo siguiente, sin éxito
1. Haga referencia a la implementación de JavaScript desde TypeScript
JavaScript:
String.prototype.Foo = function() {
// DO THIS...
}
TypeScript:
var x = "Hello World";
x.Foo(); //ERROR, Method does not exist
2. Extienda la interfaz
interface String {
Foo(): number;
}
var x = "Hello World";
x.Foo(); //Exists but no implementation.
3. Extender la clase
class String {
Foo(): number {
return 0;
}
}
// ERROR: Duplicate identifier ''String''
Como se puede ver en estos resultados, hasta ahora he podido agregar el método a través de un contrato de interfaz, pero no implementación, entonces, ¿cómo hago para definir e implementar mi método Foo como parte de la clase String preexistente?