TypeScript - sobrecargas de construtores / vários construtores / muitos construtores
Neste artigo, veremos como sobrecarregar o construtor no TypeScript. No construtor TypeScript, a transferência de arquivos é diferente da do C ++, Java ou C #. A idéia principal de sobrecarregar o construtor é criar um construtor comum que verifique qual rei de parâmetros foi usado e, posteriormente, faça alguma lógica. Útil é adicionar definições de construtores para ajudar outros programadores a saber como usar a classe da maneira correta.
Visão geral simples:
class MyClassName {
public construtor(a : number);
public construtor(a : number, b : number);
public construtor(array : Array<number>);
public construtor(...args : Array<any>) { // construtor comum
// checando argumentos e executando cenario adequado
// or throw new Error('Construtor nao suportado!');
}
}
// MyClassName usado aqui...
Veja abaixo o exemplo prático:
1. Exemplo prático de múltiplos construtores
A sobrecarga de construtores exige que você escreva alguma lógica para detectar qual construtor foi usado.
public constructor(...args : Array<any>)
contém lógica comum onde, dependendo dos argumentos utilizados, deve ser usado um caso especial de criação de objeto.
class Point {
private coordinates : Array<number>;
public constructor(x : number, y : number);
public constructor(x : number, y : number, z : number);
public constructor(x : number, y : number, z : number, ...coordinates : Array<number>);
public constructor(coordinates : Array<number>);
public constructor(...args : Array<any>) { // construtor logico comum
if(args.length == 0)
throw new Error('Argumentos nao sao definidos.');
let arg = args[0];
if(Array.isArray(arg)) {
if(arg.length < 2)
throw new Error('Numero minimo de dimensoes é 2.');
this.coordinates = arg;
} else
this.coordinates = args;
}
public getCoordinate(dimmension : number) : number {
return this.coordinates[dimmension];
}
public toString() : string {
let result = '{';
if(this.coordinates.length > 0) {
result += ' ' + this.coordinates[0];
for(let i = 1; i < this.coordinates.length; ++i)
result += ', ' + this.coordinates[i];
}
return result + ' }';
}
}
let a = new Point(1, 2);
let b = new Point(1, 2, 3);
let c = new Point(1, 2, 3, 4);
let d = new Point([1, 2]);
let e = new Point([1, 2, 3]);
let f = new Point([1, 2, 3, 4]);
console.log(a.toString());
console.log(b.toString());
console.log(c.toString());
console.log(d.toString());
console.log(e.toString());
console.log(f.toString());
Resultado:
{ 1, 2 }
{ 1, 2, 3 }
{ 1, 2, 3, 4 }
{ 1, 2 }
{ 1, 2, 3 }
{ 1, 2, 3, 4 }
Nota: um grande número de sobrecargas pode levar a uma grande quantidade de erros. Por isso, é melhor evitar essa técnica.