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"); // ✅ 匹配第二个签名