Я пытаюсь создать определение типа для интерфейса модели Sails.js. 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;
Вот у меня проблема. Для того, чтобы паруса правильно взаимодействовали с моим машинописным кодом, module.exports
должен иметь этот объект атрибутов с определениями типа базы данных. Это не было бы проблемой, за исключением случаев, когда я пытаюсь использовать этот класс, ему нужны статические методы, такие как create, которых там нет.
Я хотел бы иметь возможность написать свой машинописный код, используя модель следующим образом:
MyModel.create({name:"bob"}).then((result:MyModel) => {
//do stuff with result
});