DI 的正确令牌类型是什么

What are the correct token types for DI

在 angular1 中,我们只有提供者的令牌类型 - 字符串。在 angular2 中,我看到的所有示例似乎都使用了 class 标记。例如:

class Car {}

var injector = ResolveInjector.resolveAndCreate([
  { provide: Car, useClass: Car },
             ^^^
  { provide: Engine, useClass: Engine }
]);

我想知道有效的令牌类型是什么?它们可以基于 TypeScript 数据类型还是 JavaScript 数据类型?解析依赖时,angularuses metadata。那么有效的令牌类型是那些在元数据中有效的令牌类型吗?