【发布时间】:2017-02-26 21:38:28
【问题描述】:
我有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 类型。导入破坏了我所有的 _extra 命名空间定义,在命名空间内我不能使用导入。 我尝试创建命名空间 ContactsProject,但我遇到了同样的问题:如果我使用 imports,打字稿看不到我的命名空间,如果我没有,我无法定义我的命名空间UserInstance 类型。 Sequelize 不声明命名空间。
我只想在我的命名空间中导入一些泛型类型。
我使用 typescript 2.0.3 版。
【问题讨论】:
标签: node.js express typescript namespaces sequelize.js