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".
| Grupo | Funções e Classes |
|---|---|
| Tipo | Sintaxe |
| Modo strict | Nã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
| new | O 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 |
| => Player | O 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".
🏷️ Funções e Classes Relacionadas
💡 Casos relacionados
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.