2017-02-19 4 views
1

わからないマングースが、私は、このクラス/モジュールを持っている:TS2351:型がコールに欠けているか、または署名を構成している式で 'new'を使用することはできません。私が間違っているの何

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';

関連する問題