2017-09-14 29 views
1

新的typescript。我试图创建一个基于角色的猫鼬模型工厂将返回猫鼬模型。然后,我将在数据访问层(DAL)中使用此模型以继续我的业务层。问题是我收到以下错误。 TS2322:typeof'typeof(../../型号)不可分配给型号'型号。 'typeB('../../ model')中缺少属性'findById'TS 2322:typescript和mongoose.model作为函数的返回类型

我是否缺少显式演员?

型号代码

import * as mongoose from "mongoose"; 

let StudentSchema = new mongoose.Schema({ 
    id:Number, 
    username: String, 
    email: String, 
    sectors: [{ 
    sectorName:String, 
    QP: String 
    }] 
}, { 
    timestamps: { 
    createdAt: 'created_at' 
} 
}); 

export default mongoose.model('StudentNotification', StudentSchema); 

**我的样板工厂代码**我得到了回报StudentNotification代码中的错误。

import * as mongoose from "mongoose"; 
import * as StudentNotification from './models/student'; 

export class ModelFactory { 
private userRole:string; 
constructor(role:string){ 
    this.userRole = role; 
} 

Create():mongoose.Model<mongoose.Document>{ 
    switch(this.userRole){ 
     case "Student":{ 
      return StudentNotification; 
      break; 
     } 
     default :{ 
      return null; 
     } 
    } 
} 
} 

回答

1

要导入你需要使用这种语法默认的导出:

import * as mongoose from "mongoose"; 
import StudentNotification from './models/student'; // HERE ! 

function Create():mongoose.Model<mongoose.Document>{ 
    switch(this.userRole){ 
     case "Student":{ 
      return StudentNotification; 
     } 
     default :{ 
      return null; 
     } 
    } 
} 

或者,如果您使用*语法,那么你必须把它写这样的:

import StudentNotification from './models/student'; 
... 
     return StudentNotification.default; 
+1

它的工作。谢谢一吨 –

0

你必须将您的进口声明更改为:

import StudentNotification from './models/student'; 

因为当您将其导出时,它会使用default关键字将其导出。

export default mongoose.model('StudentNotification', StudentSchema); 
+0

谢谢萨拉瓦纳,它的工作 –