🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
Service Tokens 是唯一的标识符,提供对存储在`Container`中的值的类型安全访问。 ``` import 'reflect-metadata'; import { Container, Token } from 'typedi'; export const JWT_SECRET_TOKEN = new Token<string>('MY_SECRET'); Container.set(JWT_SECRET_TOKEN, 'wow-such-secure-much-encryption'); /** * 在JWT_SECRET_TOKEN被导入后,在应用程序的其他地方 * 导入后,可用于从容器中请求秘密。 * * 这个值是类型安全的,因为Token是类型化的。 */ const JWT_SECRET = Container.get(JWT_SECRET_TOKEN); ``` ***** ## 注入Service Tokens 它们可以与`@Inject()`装饰器一起使用,覆盖属性或参数的推断类型。 ``` import 'reflect-metadata'; import { Container, Token, Inject, Service } from 'typedi'; export const JWT_SECRET_TOKEN = new Token<string>('MY_SECRET'); Container.set(JWT_SECRET_TOKEN, 'wow-such-secure-much-encryption'); @Service() class Example { @Inject(JWT_SECRET_TOKEN) myProp: string; } const instance = Container.get(Example); // instance.myProp属性有为Token分配的值。 ``` ***** ## 同名的Token 两个具有相同名称的令牌**是不同的令牌**。这个名字只是用来帮助开发者在调试和开发过程中识别令牌。(它包括在错误信息中)。 ``` import 'reflect-metadata'; import { Container, Token } from 'typedi'; const tokenA = new Token('TOKEN'); const tokenB = new Token('TOKEN'); Container.set(tokenA, 'value-A'); Container.set(tokenB, 'value-B'); const tokenValueA = Container.get(tokenA); // tokenValueA 是 "value-A" const tokenValueB = Container.get(tokenB); // tokenValueB 是 "value-B" console.log(tokenValueA === tokenValueB); // 返回错误,因为令牌总是唯一的 ``` ***** ## Token和字符串标识符之间的区别 它们都实现了相同的目标,但是,建议使用`Token`,因为它们是类型安全的,不会被误输入,而误输入的字符串标识符将默默地返回`undefined `的值。