我有一个AdonisJS项目,并且遇到了一个关于声明文件的问题。Adonis的IoC容器利用ES6导入加载器钩子来解析依赖关系。例如,如果我想导入User
模型,它看起来像这样:
import User from "@ioc:App/Models/User";
然而,由于Adonis使用@ioc:
前缀,webstorm不知道任何关于类型的信息。为了解决这个问题,你可以在/contracts
目录下声明一个typescript定义文件,看起来像这样:
declare module "@ioc:App/Models/User" {
}
但这仍然没有真正帮助,因为现在我的User
模型没有任何键入信息。
我想做的是扩展的定义从基础Model
类,"@ioc:Adonis/Lucid/Model"
,"@ioc:App/Models/Users"
,与选项添加任何属性或方法,可能包含在该模型类。到目前为止,我尝试了这样的东西,但它似乎不做我想要的:
declare module "@ioc:App/Models/User" {
import Model from "@ioc:Adonis/Lucid/Model";
export default Model;
}
我对打字很不熟悉,所以如果这是相当直接的,我很抱歉我遗漏了一些东西。
似乎我的方法是正确的,但我使用了框架提供的错误类,因为模型扩展BaseModel
,而不是Model
。这就是我想要的:
declare module "@ioc:App/Models/User" {
import { BaseModel } from "@ioc:Adonis/Lucid/Orm";
export default BaseModel;
}