NestJS 猫鼬文档中的“Cat.name”是什么?

时间:2021-01-11 20:50:12

标签: nestjs

阅读 MongoDB technique 上的 NestJS 文档,我发现了一个令人困惑的例子:

@Injectable()
export class CatsService {
  constructor(@InjectModel(Cat.name) private catModel: Model<CatDocument>) {}

  async create(createCatDto: CreateCatDto): Promise<Cat> {
    const createdCat = new this.catModel(createCatDto);
    return createdCat.save();
  }

  async findAll(): Promise<Cat[]> {
    return this.catModel.find().exec();
  }
}

让我困惑的一行是构造函数; @InjectModel 的位置是 Cat.name。但是,在 cats.schema.ts 文件中,没有从另一个类继承,也没有任何具有该名称的静态属性:

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';

export type CatDocument = Cat & Document;

@Schema()
export class Cat {
  @Prop()
  name: string;

  @Prop()
  age: number;

  @Prop()
  breed: string;
}

export const CatSchema = SchemaFactory.createForClass(Cat);

我是否遗漏了某些东西,或者它可能是文档中的“错误”?

1 个答案:

答案 0 :(得分:3)

Cat.name 在这种情况下是指所有类(实际上所有函数都具有)的固有静态属性 name。这为我们提供了一个内置常量,我们无需自己编写即可引用该常量,但如果您愿意,也可以使用字符串 'Cat'。在这种情况下,Cat.name 是字符串 'Cat',只是在所有类(和函数)中内置的一种不同的引用方式。

JavaScript docs on Function.name