Tokens de Serviço com Segurança de Tipos
Utilize tokens tipados para evitar erros de resolução em tempo de execução.
Tokens de Serviço com Segurança de Tipos é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de TypeScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de TypeScript Academy inclui 4 aulas no total.
O problema dos tokens de texto
Tokens de texto como "Logger" são fáceis de digitar incorretamente e não carregam informações de tipo. O contêiner não pode informar que get("Loggr") está incorreto, e o tipo resolvido geralmente é any.
Símbolos como tokens
Usar símbolos em vez de textos dá a cada token uma identidade exclusiva, que não pode colidir acidentalmente com outra. Um registro central os mantém organizados.
const TYPES = {
Logger: Symbol.for("Logger"),
Mailer: Symbol.for("Mailer"),
} as const;Mapeando tokens para tipos
O objetivo mais profundo é associar cada token ao tipo para o qual ele é resolvido, para que o contêiner retorne o tipo correto em vez de any. Criamos um invólucro de token tipado.
interface Token<T> {
readonly id: symbol;
readonly _type?: T; // phantom type marker
}Criando tokens tipados
Uma função auxiliar produz um token que armazena seu tipo em um campo fantasma. O campo nunca contém um valor; ele apenas transporta informações de tipo para o compilador.
function token<T>(name: string): Token<T> {
return { id: Symbol.for(name) };
}
const LoggerToken = token<Logger>("Logger");Uma interface de contêiner tipada
Tipamos o contêiner para que get infira o tipo resolvido a partir do token. Sem conversões, sem any.
interface TypedContainer {
get<T>(t: Token<T>): T;
bind<T>(t: Token<T>, impl: () => T): void;
}Vinculando com tipos inferidos
Ao fazer a vinculação, o tipo de retorno da fábrica deve corresponder ao tipo do token. Incompatibilidades são detectadas em tempo de compilação.
declare const c: TypedContainer;
c.bind(LoggerToken, () => new ConsoleLogger());
// ConsoleLogger must satisfy Logger or this errors.Resolvendo com tipos completos
Agora get retorna exatamente o tipo do token. O preenchimento automático e a verificação de tipos funcionam no resultado sem nenhuma anotação manual.
const logger = c.get(LoggerToken); // type: Logger
logger.log("typed resolution");Evitando erros de consulta
Como os tokens são valores tipados, um erro de digitação referencia uma variável indefinida (um erro de compilação), em vez de produzir silenciosamente um texto incorreto. Toda a categoria de erros relacionados a chaves de texto desaparece.
// c.get(LogerToken) -> compile error: LogerToken is not definedEquivalente no InversifyJS
O Inversify oferece suporte a tokens de símbolo, e auxiliares da comunidade adicionam invólucros tipados. O princípio é idêntico: vincular um token tipado a uma implementação e resolvê-lo com o tipo correto.
import { Container } from "inversify";
const TYPES = { Logger: Symbol.for("Logger") };
// container.bind<Logger>(TYPES.Logger).to(ConsoleLogger)Um registro de tokens
Centralizar os tokens em um único módulo fornece uma única fonte de verdade, facilitando sua descoberta, refatoração e manutenção consistente em toda a base de código.
export const TOKENS = {
Logger: token<Logger>("Logger"),
Mailer: token<Mailer>("Mailer"),
};Resumo dos benefícios
Tokens tipados oferecem identidade exclusiva (símbolos), segurança em tempo de compilação (incompatibilidades são rejeitadas), tipos resolvidos corretos (sem any) e proteção contra erros de digitação (erros de variável indefinida).
Verificação rápida
Verificação rápida desta lição.
Recapitulação
Tokens de serviço seguros quanto aos tipos envolvem um symbol exclusivo com um tipo fantasma, mapeando cada token para o tipo ao qual ele é resolvido. get retorna o tipo preciso, a vinculação exige implementações correspondentes, e erros de digitação se tornam erros de compilação em vez de erros silenciosos de consulta por texto.
Perguntas Frequentes
A aula “Tokens de Serviço com Segurança de Tipos” é grátis?
Sim — o texto completo de “Tokens de Serviço com Segurança de Tipos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de TypeScript Academy, atualize para CoddyKit PRO. O curso de TypeScript Academy inclui 4 aulas no total.
O que vou aprender em “Tokens de Serviço com Segurança de Tipos”?
Utilize tokens tipados para evitar erros de resolução em tempo de execução. Você pratica TypeScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar TypeScript Academy?
Nenhuma experiência prévia é necessária. TypeScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Tokens de Serviço com Segurança de Tipos”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de TypeScript Academy?
Sim. Cada aula de TypeScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Fundamentos da Inversão de Controle
- Injeção pelo Construtor
- Contêineres de DI com InversifyJS
- Tokens de Serviço com Segurança de Tipos