¿Puedo usar sobrecargas de TypeScript al usar la sintaxis de flecha gorda para métodos de clase?
He convertido algunas clases del formato convencional:
class TestOverloads {
private status = "blah";
public doStuff(selector: JQuery);
public doStuff(selector: string);
public doStuff(selector: any) {
alert(this.status);
}
}
usar expresiones de función flecha en su lugar:
class TestOverloads2 {
private status = "blah";
public doStuff = (selector: any) => {
alert(this.status);
}
}
para evitar problemas de alcance cuando los métodos de la clase se utilizan en una devolución de llamada (ver aquí para más información).
No puedo averiguar cómo recrear las firmas de mis funciones sobrecargadas. ¿Cómo escribiría mis sobrecargas al usar la flecha gorda?
Respuesta #1
Puedes escribir un literal de tipo en línea para las firmas de llamada que la función admite:
class TestOverloads2 {
private status = "blah";
public doStuff: {
(selector: JQuery): void;
(selector: string): void;
} = (selector: any) => {
alert(this.status);
}
}
Eso es un poco horroroso, así que quizá quieras extraerlo a una interfaz en su lugar:
interface SelectByJQueryOrString {
(selector: JQuery): void;
(selector: string): void;
}
class TestOverloads3 {
private status = "blah";
public doStuff: SelectByJQueryOrString = (selector: any) => {
alert(this.status);
}
}
Respuesta #2
Es un poco una tecnicidad, pero ya no estás creando una función, estás creando una propiedad (que resulta ser una función).
Sin embargo, podrías resolver tu problema usando nombres en lugar de sobrecarga.
class TestOverloads2 {
private status = "blah";
public doStuffWithSelector = (selector: string) => {
alert(this.status);
}
public doStuffWithJqueryObject = (jqo: JQuery) => {
alert(this.status);
}
}
Si hay duplicación significativa, puedes poner eso en una función común que ambas funciones nombradas llamen, por ejemplo: this.sharedStuff().
