Tengo un método foo(msg: string, arg: string) que llamará a un método desde bar , que es un objeto de la misma clase que foo . Qué método depende del valor de arg . Mi problema es cómo debo hacer eso de una buena manera.
En mi base de código real, quiero usarlo para refactorizar. Porque se ve así:
add() { foo('Adding', 'add'); } sub() { foo('Subtracting', 'sub'); } mul() { foo('Multiplying', 'mul'); } div() { foo('Dividing', 'div'); }Tengo un método como este:
foo(msg: string, arg: string) { console.log(msg); this.bar[arg](); // More code } En otras palabras, quiero llamar al método arg desde bar . Y esto funciona como debería. Sin embargo, me gustaría restringir los valores que puede tener arg . Supongo que podría hacer algo como:
foo(arg: string) { if(arg !== 'fun1' && arg !== 'fun2') { // Handle error } this.bar[arg](); } El argumento arg nunca será "construido". Uso valores constantes directamente todo el tiempo, como
foo('fun1');y nunca algo asi
// Example of how I will NOT use this let arg = someFunctionReturningAString(); foo(arg);Mis preocupaciones aquí son 1) la seguridad y que la gente diga "¡NOOOOO! ¡Es una mala práctica!" y 2) que mi IDE no puede detectar errores ortográficos con mi enfoque.
Entonces, mi objetivo aquí es un método conveniente para llamar a un método desde la bar según el argumento arg . Preferiblemente algo que haga que un IDE sea capaz de detectar errores ortográficos. ¿Cómo puedo hacer eso?
Podrías usar tipos literales en tu firma, como:
foo(msg: string, arg: 'add' | 'sub' | 'mul' | 'div') { console.log(msg); this.bar[arg](); // More code }https://www.typescriptlang.org/docs/handbook/literal-types.html