Node.js 参考Typescript.d.ts文件中定义的其他库类型/接口
编辑以尝试更具体(删除旧示例): 我想知道如何在我自己的类和接口中将.d.ts文件中定义的类型或接口引用为函数参数或类属性的类型 这里有一个例子。我将解释一些不完全正确的细节 与问题相关,但解释了代码示例:Node.js 参考Typescript.d.ts文件中定义的其他库类型/接口,node.js,typescript,sequelize.js,Node.js,Typescript,Sequelize.js,编辑以尝试更具体(删除旧示例): 我想知道如何在我自己的类和接口中将.d.ts文件中定义的类型或接口引用为函数参数或类属性的类型 这里有一个例子。我将解释一些不完全正确的细节 与问题相关,但解释了代码示例: var fs = require("fs"); var path = require("path"); var Sequelize = require("sequelize"); var config = require('../config/environment'); class Se
var fs = require("fs");
var path = require("path");
var Sequelize = require("sequelize");
var config = require('../config/environment');
class SequelizeDB{
sequelizeInstance: any;
sequelize: any;
modelDirectory: string;
constructor(Sequelize, dbConfig){
//instantiate the sequelize instance object
this.sequelize = Sequelize;
this.sequelizeInstance = this.getDatabaseInstance(this.sequelize,
dbConfig.databaseName,
dbConfig.userName,
dbConfig.password,
dbConfig.hostName,
dbConfig.port,
dbConfig.dialect);
this.modelDirectory = __dirname + '/sequelize';
this.importDataModels();
this.associateDataModels();
}
private getDatabaseInstance(Sequelize,
databaseName: string,
userName: string,
password: string,
hostName: string,
port: number,
dialect: string){
return new Sequelize(
databaseName,
userName,
password,
//options
{
host: hostName,
dialect: dialect,
port: port,
pool: {
max: 5,
min: 0,
idle: 10000
},
});
}
private importDataModels(){
//read in all the models from the current folder
fs
.readdirSync(this.modelDirectory)
.filter((fileName) => {
return this.isModelFile(fileName);
})
.forEach((file) =>{
//create the models in the seuelizeInstance
var model = this.sequelizeInstance.import(path.join(this.modelDirectory, file));
this[model.name] = model;
});
}
private isModelFile(fileName: string){
return (fileName.indexOf('.') !== 0) &&
(fileName !== 'index.js') &&
(fileName.indexOf('.map') === -1) && //ignore map files
(fileName.indexOf('.ts') === -1); //ignore ts files
}
private associateDataModels(){
Object.keys(this).forEach((modelName) => {
if (typeof( this[modelName]) === 'object' && 'associate' in this[modelName]) {
this[modelName].associate(this);
}
});
}
};
module.exports = new SequelizeDB(Sequelize, config.sql);
我正在使用Sequelize,我已经为它设置了一个模式
根据他们的文档轻松创建模型。这个
当前的设置适合我,代码所做的是创建一个
在创建时设置数据库连接
然后它循环遍历models文件夹中的所有文件并创建所有模型
使用sequelize.import
现在我想知道的是,我将如何替换此部件以使用实际的
从sequelize的.d.ts文件中键入(此处)[
在我看来,有一个Sequelize静态对象用于创建(小写)Sequelize实例。如下所示:
new Sequelize(//config values)
我想将这两个东西存储在我在上面代码中创建的类中,并且当前要使它们通过编译器,我使它们的类型为any
sequelizeInstance: any;
sequelize: any;
我如何能够利用现有的Sequelize.d.ts文件,并更明确地说明我在该对象中期望的类型以及传递给其构造函数的类型
这不是唯一的例子,但我更一般的要求是我可以在TypeScript中创建接口或类
并通知函数以该特定类或接口为例:
interface IUser{
id: number,
username: string,
passwork: string
}
function validateUser(user: IUser): boolean{
//implementation
}
如果用户界面是在我使用npm安装并使用tsd安装的节点中的模块中定义的,我该怎么做
如果这还不够详细,请告诉我,我将尝试解释更多。最简单的方法是使用
/// <reference path="../typings/sequelize/sequelize.d.ts" />
编译器将在编译代码之前获取该文件。如果它只有环境声明(d.ts),则不会将其包含在最终结果中(这很好).您的问题非常模糊,请解释您想要实现的目标。@gilamran我已经更新了我的问题。如果这不够具体,请告诉我。这是一个通用的实现思想,我已经在Google上搜索了很长时间,我确信我只是缺少一些简单的东西。不要在Typescript中使用
var…require
,请使用导入…从
中,这也会导入定义。请详细说明tsconfig.json选项?我将如何设置这些文件?你能导入你的主tsd.d.ts吗?我似乎无法让其他选项中的任何一个像我想的那样工作。但我会再试一次。我觉得如何使用c正确的做法是在Typescript中创建节点。文档中有少量节点,但不多。
import * from '../typings/sequelize/sequelize'; // without extension