En lenguajes fuertemente tipados, como C# o Java, puedo distinguir las firmas de los constructores por tipos de argumentos.
class Cars { Cars(string x, string y) {}; Cars(string x, int y) {}; }Pero sin tipeo fuerte en JavaScript, solo puedo hacer esto, lo que obviamente no funcionará:
class Cars { Cars(x, y) {}; Cars(x, y) {}; }¿Estoy limitado solo a la cantidad de argumentos de constructor para distinguirlos? ¿Hay alguna forma de crear constructores JS que tengan la misma cantidad de argumentos, pero de diferentes "tipos"?
¿Cómo hago constructores que saben que debería estar buscando una string y en el primer constructor, pero int y en el segundo?
La única forma de hacer esto con JavaScript en sí sería usar controles typeof dentro del cuerpo del constructor.
class Cars { constructor(x, y) { if (typeof x === 'string' && typeof y === 'string') { // implementation } else if (typeof x === 'string' && typeof y === 'number') { // implementation } } }Si usara TypeScript, podría hacer que las firmas sean más explícitas y entendidas por buenos IDE (para autocompletar y demás), pero aún tendría que escribir las pruebas para diferenciar entre diferentes parámetros dentro del propio constructor para el código emitido . No hay mucho de una mejora.
En JS y TS, solo hay un constructor para una clase: no puede tener varios según los tipos de argumentos, solo puede modificar el constructor para que se adapte a sus propósitos.