ts中的@Inject
时间: 2024-10-11 17:08:06 浏览: 21
在TypeScript(简称TS)中,`@Inject`通常是一个装饰器,用于依赖注入(Dependency Injection,DI)。它常见于使用像Angular、NestJS等基于 TypeScript 的框架时,这些框架支持通过元数据注解来管理应用组件和服务之间的依赖关系。
当你在一个类上使用`@Inject`装饰器,并指定某个类型的构造函数参数,框架会在运行时自动找到并注入这个依赖。例如:
```typescript
import { Injectable } from '@nestjs/common';
@Injectable()
export class UserService {
constructor(@Inject('userRepository') private userRepository: UserRepository) {
// ...
}
}
```
在这个例子中,`UserService`需要一个`UserRepository`实例。`@Inject('userRepository')`告诉框架应该从哪里获取这个仓库。`'userRepository'`通常是配置项或者服务注册的名称。
相关问题
我有一个js类,如何写对应的index.d.ts:import { Inject, Injectable } from '@nestjs/common'; import { Cron } from '@nestjs/schedule'; import * as moment from 'moment'; import { SsrDbService } from '../db/service/ssr.db.service'; import { MipmsDbService } from '../db/service/mipms.db.service'; @Injectable() export class SampleService { constructor(@Inject(SsrDbService) private readonly ssr: SsrDbService, @Inject(MipmsDbService) private readonly mipms: MipmsDbService) { } /** * <pre> * 每分钟执行一次样品信息同步,同步逻辑如下: * 1、需要在检验项目管理系统增加一个数据变动记录表 * 2、在样品表和样品表上增加一个触发器,将表中样品信息修改记录到数据变动记录表中 * 3、本服务会自动查询检验系统的数据变动记录表内容,若存在变动记录则将对应数据查询出来更新到ssr3系统的样品表中 * 4、同步后向ssr3系统的通知表中写入信息变动记录,由系统向用户发送提示 * * 同步的样品信息包括: * 1、样品作废信息:样品表中增加触发器 * 2、样品修改信息:样品表中增加触发器 * 3、删除样品:样品表中增加触发器 * 4、新增样品:在用户领取任务后,将自动同步样品信息到ssr3系统中,所以需要在领取任务表中增加触发器 * </pre> */ @Cron('5 * * * * *') async cron() { const time = moment().format('YYYY年MM月DD日HH时mm分'); console.log(`${time}==>Called every minute`); const sample = await this.ssr.ssr_sample.findFirst({ where: { sam_name: { contains: 'BH71' }, } }) console.log(`ssr_sample=>`, sample); const sample2 = await this.mipms.mipms_sample.findFirst({ where: { sam_name: '郑单958', } }) console.log(`mipms_sample=>`, sample2); } }
你可以像这样写一个对应的index.d.ts文件:
```typescript
import { SsrDbService } from '../db/service/ssr.db.service';
import { MipmsDbService } from '../db/service/mipms.db.service';
declare module "sample-service" {
import { Cron } from '@nestjs/schedule';
import * as moment from 'moment';
export class SampleService {
constructor(ssr: SsrDbService, mipms: MipmsDbService);
@Cron('5 * * * * *')
async cron(): Promise<void>;
}
}
```
这里我们使用declare module来声明模块。在模块中,我们导入了需要使用的依赖,同时定义了SampleService类的类型。
<template> <div class="s">底层组件</div> <div>来自顶层的响应式数据:{{ data }}</div> <button @click="setData">修改顶层数据</button> </template> <script setup lang='ts'> import {inject} from 'vue'; const data = inject('key') const setData = inject('key1') </script> <style> </style>
这是一个 Vue 3 的单文件组件,使用了 `<script setup>` 语法,可以更简洁地定义组件的逻辑部分。在这个组件中,使用了 `inject` 函数来从顶层组件中获取响应式数据 `data` 和修改数据的函数 `setData`。其中,`inject` 函数的第一个参数是一个 key,表示要获取的属性在顶层组件中的名字,第二个参数是一个默认值,在顶层组件中不存在该属性时会使用默认值。在这个组件中,`inject` 函数的第一个参数是 `'key'`,表示要获取的属性在顶层组件中的名字是 `'key'`,而第二个参数没有指定,表示在顶层组件中不存在 `'key'` 属性时不会有默认值。同理,`inject` 函数的第一个参数是 `'key1'`,表示要获取的属性在顶层组件中的名字是 `'key1'`,而第二个参数同样没有指定,表示在顶层组件中不存在 `'key1'` 属性时不会有默认值。最后,这个组件输出了一个 `<div>` 标签和一个 `<button>` 标签,分别用来展示从顶层组件中获取的响应式数据和调用从顶层组件中获取的修改数据函数。
阅读全文