@nestjs/common中Type接口的作用及使用困惑解析
关于@nestjs/common中Type接口的疑问与解答
问题描述
我无法理解@nestjs/common包中Type接口的具体作用,特求助。
Type接口定义如下:
export interface Type<T = any> extends Function { new (...args: any[]): T; }
我尝试在模板类中使用它,将泛型约束T2 extends IProtoData改为T2 extends Type时,出现TypeScript错误:
error TS2344: Type 'Coordinate' does not satisfy the constraint 'Type'.
Type 'Coordinate' is missing the following properties from type 'Type': apply, call, bind, prototype, and 5 more.
我对该接口的机制理解如下,请求纠正误区:
- 获取接口中定义的属性列表
- 继承Function对象
- 调用函数创建方法
new (...args: any[]): T; - 最终得到JavaScript函数实例而非接口
解答
你的理解存在偏差,这完全是TypeScript类型层面的定义,不会生成任何JavaScript函数实例。
Type类型助手的作用是表示接收类引用而非类实例。比如在Nest的@Module装饰器的imports数组中,我们只需要传入AuthModule而非new AuthModule(),Nest会自行处理后续实例化逻辑,这就是Type接口的典型使用场景。
可以把Type接口看作「可实例化类型」,它支持动态调用new操作,示例代码如下:
function createClass<T>(classRef: Type<T>): T { return new classRef(); }
传入AuthService调用createClass会返回AuthService实例,TypeScript能正确推导返回值的类型。
内容的提问来源于stack exchange,提问作者Kuramori Reika
相关产品推荐
相关产品推荐

