Sailsjs模型静态方法

时间:2015-03-20 22:17:24

标签: typescript sails.js definitelytyped

我正在尝试为sails.js的Model接口创建一个类型定义。 sails.js允许您定义一个简单的文件,该文件使用嵌套的"属性"宾语。每个属性对应于数据库中的列名称和列类型。

//MyModel.js
module.exports = {

  attributes:{
     name:"string"
  }

}; 

要在代码中使用此模型,可以编写如下代码:

MyModel.create({name:"alex"}).then(function(result){
   //the model was inserted into the DB, result is the created record.
});

我写的代码如下:

declare module Sails{

  export interface Model{
    create(params:Object):Promise<Sails.Model>;
  }
}

class Model implements Sails.Model{

  create(params:Object):Promise<Sails.Model> {
    return undefined;
  }

  attributes:Object;

  constructor(attributes:Object){
    this.attributes = attributes;
  }


}

class MyModel extends Model{
    constructor(attributes:Object){
        super(attributes);
     }
}

var _export = new MyModel({name:string});

export = _export;

这是我遇到的问题。为了使sailsjs能够正确地与我的typescript代码接口,module.exports必须在其上具有数据库类型定义的属性对象。这不是一个问题,除非我尝试使用这个类,它需要静态方法,比如在那里没有创建。

我希望能够使用这样的模型编写我的打字稿代码:

MyModel.create({name:"bob"}).then((result:MyModel) => {
   //do stuff with result
});

1 个答案:

答案 0 :(得分:1)

我已经解决了它,但它并不漂亮:

//api/models/MyModel.ts
import Model = require('./Model');

var MyModel = new Model({
  name:"string"
});

export = MyModel;


//api/model/Model.ts
class Model {

  attributes:Object;
  constructor(attributes:Object){
    this.attributes = attributes;
  }

}
export = Model;


//api/types/MyModelQuery.ts
//this file maps to the attributes of a query result

declare class ScreenQuery {
  name:string;
}
export = ScreenQuery;


//sails.d.ts

declare module Sails{

  export interface Model{
    create(params:Object):Promise<Sails.QueryResult>;
    attributes:Object;
  }

  export interface QueryResult{

  }

  export interface Controller{

  }

}

我还在努力,一旦我完成了全部实施,我就会更新。

编辑:我创建了一篇博文,全面描述了我采用的方法。 Using typescript with sails.js