2017-02-19 45 views
1

不知道我做錯了,但我有這個類/模塊:TS2351:不能對類型缺少調用或構造簽名的表達式使用「新」。貓鼬

import * as Mongoose from 'mongoose'; 
 
import * as _ from 'lodash'; 
 
import * as Promise from 'bluebird'; 
 
import { db } from '../lib/database'; 
 

 
let mongoose = Mongoose; 
 

 
mongoose.Promise = Promise; 
 

 

 
export class BaseModel { 
 

 
    constructor(schemaObj: {}, modelName: string, statics?: {}) { 
 
     let Schema = new mongoose.Schema(schemaObj) 
 

 
     Schema.statics.list = function() { 
 
     return this.find() 
 
     } 
 

 
     Schema.statics.save = function (dataObj) { 
 
     return this.save(dataObj) 
 
     } 
 

 
     if (statics) { 
 
     for (let key in statics) { 
 
      Schema.statics[key] = statics[key]; 
 
     } 
 
     } 
 
     
 
     return mongoose.model(modelName, Schema); 
 
    } 
 
    
 
} 
 

 
let schema = { 
 
    title: String, 
 
} 
 

 
let Message = new BaseModel(schema, 'message'); 
 

 
let j = new Message({title: 'Hello World'}).save().then(function (res) { 
 
    console.log(res); 
 
})

一切實際工作的擊打打字稿抱怨:

TS2351:不能使用'新「,表達式的類型缺少調用或構造簽名。

我知道我錯過了一些東西,但我無法弄清楚什麼。

回答

1

我不認爲問題出在您的代碼中,您正在使用的唯一的new運算符是創建一個新的貓鼬方案,它看起來是正確的。可能問題在於貓鼬類型。

你提到的錯誤通常表明,當函數返回另一個函數,而不是類的實例(如:https://github.com/Microsoft/TypeScript/issues/2081)。

嘗試將類型更新爲最新版本或嘗試將其降級爲其他較低版本。

(分型是這樣的神奇和我們的項目,我們有時需要解決一個特定的版本,因爲即使是較新的路徑版本可以打破該項目。)

+0

舊版本和新版本沒有幫助。在這種情況下,如何添加一個新的構造函數?已經看了很多資源,並做了很多修補與它,只是似乎無法弄清楚。 –

0

嘗試取出* as當您導入貓鼬。所以它會變成 import Mongoose from 'mongoose';

相關問題