我有some models,例如:
import * as Sequelize from 'sequelize'; // !
export interface UserAttributes {
id?: number;
email?: string;
googleToken?: string;
}
export interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
}
export interface UserModel extends Sequelize.Model<UserInstance, UserAttributes> {
}
// ... model definition
我需要使用 import 语句来使用泛型类型Sequelize.Instance<TInstance, TAttributes>
我怀疑一些中间件将用户实例添加到请求对象(或 req.session 对象,不会遇到)
然后我需要typescript to know我的新扩展,为此我有文件 src / _extra.ts 的内容:
/// <reference path="./models/db.ts" /> -- also does not work
declare namespace Express {
export interface Request {
oauthClient: Googleapis.auth.OAuth2; // Googleapis is namespace
user?: UserInstance; // or ContactsProject.Models.UserInstance;
}
export interface Session {/* ... some same */}
}
我需要从模型文件中导入 UserInstance 类型。 Imports打破了我的所有 _extra 命名空间定义,在命名空间内我不能使用导入。 我尝试过创建命名空间 ContactsProject ,但我遇到了同样的问题:如果我使用 imports ,typescript看不到我的命名空间,如果我没有,我无法定义我的 UserInstance 类型。 Sequelize没有声明名称空间。
我只想在我的命名空间中导入一些泛型类型。
我使用的是typescript Version 2.0.3。
答案 0 :(得分:1)
在文件中使用import
语句时,TypeScript会将其视为模块。因此,您在其中声明的任何名称空间将不再是全局名称,而是该模块的本地名称。
导入您的接口,然后将命名空间声明包装在declare global { ... }
。