new () => T Assinaturas de construção

Última atualização: 2026-10-22

new () => T Assinaturas de construção

Uma assinatura de construção new (name: string) => T descreve "este valor pode receber new e gerar um T". Ela é necessária ao passar classes (não instâncias) por aí — fábricas, injeção de dependência e sistemas de plugins dependem dela para abstrair "a capacidade de construir".

GrupoFunções e Classes
TipoSintaxe
Modo strictNão necessário

ℹ️ Info O editor transpila TypeScript para JavaScript e o executa (sem verificação de tipos); veja a Saída de cada exemplo para o resultado da verificação.

📝 Sintaxe

class Player {
  constructor(public name: string, public hp = 100) {}
}

type PlayerCtor = new (name: string, hp?: number) => Player;

function spawn(Ctor: PlayerCtor, name: string, hp?: number): Player {
  return new Ctor(name, hp);
}

⚙️ Parâmetros

newO prefixo da assinatura de construção: essa assinatura é invocada com new, não chamada diretamente
(name: string, hp?: number)Parâmetros do construtor: correspondência posicional com o construtor da classe
=> PlayerO tipo produzido: o resultado da expressão new

Retorno:O tipo à direita de =>, que é o resultado da expressão new; fábricas normalmente o repassam como seu próprio tipo de retorno.

▶ Exemplo

Edite o código abaixo e clique em Testar para ver o resultado transpilado:

Saída:

Ada hp=100, Ben hp=80

(Saída de execução após a transpilação; passar a spawn uma classe cujo construtor não corresponde gera um erro em tempo de compilação)

💡 Observações

ℹ️ Info A própria classe é o valor de sua assinatura de construção: você passa a referência de Player e a fábrica faz o new — a expressão, no nível de tipos, de "classes são cidadãs de primeira classe".
💡 Dica A fábrica genérica new (...args: any[]) => T é a DI mínima: passe qualquer classe e receba um T. Use InstanceType<typeof C> quando os parâmetros exatos do construtor importarem.
⚠️ Atenção Classes abstratas não satisfazem assinaturas de construção concretas (não podem receber new diretamente); use uma assinatura de construção abstrata abstract new (...) => T para "classe ou subclasse".
Mais casos em breve.

📚 Tutoriais relacionados

❓ Perguntas frequentes

P Assinatura de construção vs InstanceType<typeof Player>?
R typeof Player é a própria classe, com membros estáticos e parâmetros exatos do construtor; new (...) => T apenas promete "pode virar um T com new". Exato: o primeiro. Fábricas genéricas: o segundo.
P Quando uma assinatura de construção é necessária?
R Sempre que uma classe é passada como valor: spawn(PlayerCtor, name), registro em contêiner, carregamento de plugins. Interfaces descrevem instâncias, não classes.
P Como escrever uma fábrica genérica que seja genérica e type-safe?
R function create<T>(Ctor: new (...args: any[]) => T, ...args: any[]): T { return new Ctor(...args); } — entradas flexíveis compram genericidade, e o retorno continua sendo um T preciso.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%