我有{{3}}用JS编写的。该库具有返回构造函数的工厂方法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
?
答案 0 :(得分:1)
根据您提供的用法示例,这是我的最佳猜测:
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;
}