返回构造函数的工厂方法的类型



我有用JS编写的3d party lib。该库具有返回构造函数的工厂方法db.model()。看起来是这样的:

var person = db.model({table: 'people'});
var bob = person({name: 'bob'});
bob.save()

使用new创建对象没有文档记录,但也可以(不知道它是否安全,但它通过了我的所有测试(:

var Person = db.model({table: 'people'});
var bob = new Person({name: 'bob'});
bob.save()

此外,返回的构造函数具有静态方法:

person.query('select * from people where id = @id', {id: 1}, function (people) {});

问题是如何定义这种情况下的打字法。如何定义db.model()返回构造函数,所以当我做const bob = new Person({name: 'bob'})时,const bob的类型将被确定为Person

以下是我根据您给出的用法示例得出的最佳猜测:

interface DB { 
model(arg: { table: "people" }): Model<PersonInitParams, Person>;
}
interface Entity { 
save(): void;
}
type PersonInitParams = { name: string };
interface Person extends Entity { 
// ...
}
interface Model<IP, E> { 
(initParams: IP): E;
new(initParams: IP): E;
query(query: string, bindParams: {[name: string]: any}, cb: (results: E[]) => void): void;
}

相关内容

最新更新