gpt4 book ai didi

TypeScript 装饰器,获取构造函数参数类型和注入(inject)

转载 作者:行者123 更新时间:2023-12-02 20:24:23 25 4
gpt4 key购买 nike

假设您有一个这样的类,并附加了 Router 装饰器。

@Router
class AuthRouter {

constructor(private cacheService: CacheService) {}
}

如何从 Router 装饰器中获取构造函数参数类型?假设我们存储了 CacheService 的单例,如果我们知道类名“CacheService”,就可以访问该单例。

function Router(target) {

// somehow get the constructor class name
const dependencyNames = 'CacheService' // an array if multiple args in constructor

// getSingleton is a function that will retrieve
// a singleton of the requested class / object
return new target(getSingleton(dependencyNames))
}

因此,每当我们使用 AuthRouter 时,它都会注入(inject) CacheService

最佳答案

import 'reflect-metadata'

function Router(target) {
const types = Reflect.getMetadata('design:paramtypes', target);
// return a modified constructor
}

请注意,您调用 getMetadata 时没有第三个参数。 types 将是构造函数参数的数组。 types[0].name === 'CacheService' 在您的情况下。

关于TypeScript 装饰器,获取构造函数参数类型和注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43471592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com