javascript - Alias de método con TypeScript
Supongo que esta es la forma más fácil de implementar un alias de método con TS:
export class Foo {
bar(){
}
aliasOfBar(){
return this.bar.apply(this, arguments);
}
}
pero simplemente me pregunto si hay otra manera de definir un alias con TS (o JS). Tal vez idealmente sin una llamada de función adicional.
Si hago esto, por ejemplo:
let mySharedFn = function () {
};
export class Foo {
public bar = mySharedFn
public aliasBar = mySharedFn
}
se transcompila a esto:
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var mySharedFn = function () {
};
var Foo = (function () {
function Foo() {
this.bar = mySharedFn;
this.aliasBar = mySharedFn;
}
return Foo;
}());
exports.Foo = Foo;
Me gustaría evitar esas llamadas adicionales que vienen con el uso del constructor para crear los métodos, etc.
Respuesta #1
Puedes agregar el método alias a la clase usando una interfaz y el prototipo, así:
class Person {
constructor(public name: string) {}
greet(greeting: string): string { return `${greeting}, ${this.name}`; }
}
interface Person {
hi: typeof Person.prototype.greet;
}
Person.prototype.hi = Person.prototype.greet;
const p = new Person("Alice");
console.log(p.greet("Hey"));
console.log(p.hi("Hi"));
