上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

nestjs mongoose使用raw函数与ts类型声明与class声明区别

[复制链接]
  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    620

    主题

    5084

    回帖

    5958

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    5958

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2023-1-4 23:32:35 | 显示全部楼层 | 阅读模式

    结论

    如果使用ts类型声明,但不使用raw函数
    则等同于在ts类型推断存在Student,而实际类型为Object类型

    interface Student {
      name: string;
      age: number;
    }
    
    @Schema()
    export class Cat {
      @Prop()
      name: string;
    
      @Prop()
      age: number;
    
      @Prop()
      breed: string;
    
      @Prop()
      stu: Student;
    }

    如果使用Class类,同时不使用raw函数
    则等同于声明了TS类型声明,并且JS存在对应的类型

    @Schema()
    export class Student2 {
      @Prop()
      name: string;
    
      @Prop()
      age: number;
    }
    @Schema()
    export class Cat {
      @Prop()
      name: string;
    
      @Prop()
      age: number;
    
      @Prop()
      breed: string;
    
      @Prop()
      stu: Student2;
    }

    如果使用TS类型声明+raw函数
    则类型推断以TS类型声明为主,实际生成的代码以raw函数内容为主

    interface Student {
      name: string;
      age: number;
    }
    @Schema()
    export class Cat {
      @Prop()
      name: string;
    
      @Prop()
      age: number;
    
      @Prop()
      breed: string;
    
      @Prop(
        raw({
          name: { type: String },
          age: { type: Number },
        }),
      )
      stu: Student;
    }
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表