Typed tokens
A Token<Value> flows through every bind → resolve path, and @injectable checks the dependency list against the constructor. This is the quick start’s OrderService; hand it the shop’s config token in place of the logger’s and the compiler says so before anything runs:
const LoggerToken = token<Logger>("shop:Logger");
@injectable([LoggerToken])
class OrderService {
constructor(private readonly logger: Logger) {}
}tsc --noEmit: 0 errors. The list names a Logger and the constructor takes one.