Typescritp: Sobrecarga de Construtor
TypeScript: Constructor Overloading
Introduction
Just like functions, constructors can have multiple signatures.
简介
就像函数一样,构造函数也可以拥有多个签名。
The Problem
class Evento {
constructor(id: string, tipo: string, competencia: string) { ... }
// how to also accept only id and tipo, without competencia?
}
问题所在
class Evento {
constructor(id: string, tipo: string, competencia: string) { ... }
// 如何在不传入 competencia 的情况下,仅接受 id 和 tipo?
}
Solution — Overload Signatures
class Evento {
id: string;
tipo: string;
competencia: string;
// signatures
constructor(id: string, tipo: string);
constructor(id: string, tipo: string, competencia: string);
// implementation
constructor(id: string, tipo: string, competencia: string = "nao-definida") {
this.id = id;
this.tipo = tipo;
this.competencia = competencia;
}
}
new Evento("1", "R-2010"); // ✅ first signature
new Evento("1", "R-2010", "2024-01"); // ✅ second signature
解决方案 — 重载签名
class Evento {
id: string;
tipo: string;
competencia: string;
// 签名
constructor(id: string, tipo: string);
constructor(id: string, tipo: string, competencia: string);
// 实现
constructor(id: string, tipo: string, competencia: string = "nao-definida") {
this.id = id;
this.tipo = tipo;
this.competencia = competencia;
}
}
new Evento("1", "R-2010"); // ✅ 匹配第一个签名
new Evento("1", "R-2010", "2024-01"); // ✅ 匹配第二个签名