Olá, gente. Primeiro eu queria parabenizar vocês pelos cursos e mostrar meu interesse por mais conteúdo em typescript. Eu não sei se já existe, mas também seria interessante cursos focados em arquitetura de software com typescript (eu vi que têm para php e c#)
Bom, mas a dúvida seria em relação ao decorator de uma classe.
Nessa lição, o professor passou o seguinte exemplo:
export function meuDecoratorDeClasse() {
return function(constructor: any) {
const original = constructor;
const novo: any = function (...args: any[]) {
console.log("Criando uma instância com New: " + original.name);
return new original(...args);
}
novo.prototype = original.prototype;
return novo;
}
}
Ele usou o tipo any para o constructor. Mas e se eu quisesse deixar explícito que a função recebe um constructor, teria um tipo para isso? Eu criei um tipo baseado em um exemplo na internet mas queria ver outras soluções com vocês.
Meu exemplo:
class _Class { constructor(...args: any[]){} }
type Class<T = {}> = typeof _Class & {prototype: T};
export function meuDecoratorDeClasse (): Function {
return function (constructor: Class) {
const original = constructor;
const novo = function (...args: any[]) {
console.log(`Nova instância de ${original.name}`);
return new original(...args);
}
novo.prototype = original.prototype;
return novo;
}
}
EDIT: E o retorno dessa função novo seria de qual tipo? Eu revi o meu exemplo e coloquei o retorno como sendo da classe _Class que eu criei:
const novo = function (...args: any[]): _Class {
console.log(`Nova instância de ${original.name}`);
return new original(...args);
}
Após a alteração o código continuou funcionando mas eu não sei o quão confiável ele é.