【问题标题】:Creating a NodeJS module with TypeScript使用 TypeScript 创建 NodeJS 模块
【发布时间】:2016-02-09 05:29:11
【问题描述】:

我正在尝试使用 TypeScript 编写一个 Node 模块,这就是我的目标:

MysqlMapper.ts

export class MysqlMapper{

    private _config: Mysql.IConnectionConfig;

    private openConnection(): Mysql.IConnection{
        ...
    }

    private createSelectAllQuery(constructor): string{
    ...
    }

    public getAll<T>(constructor): Q.Promise<Array<T>>{
    .....
    }
    constructor(config: Mysql.IConnectionConfig){
    ... 
    }

}

index.ts

export * from "./MysqlMapper";

package.json

{
  "name": "mysql-metadata-orm",
  "version": "1.0.0",
  "description": "A Simple ORM using reflect-metadata",
  "main": "build/index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "..."
  },
  "author": "+",
  "license": "MIT",
  "dependencies": {
    "mysql": "^2.9.0",
    "q": "^1.4.1",
    "reflect-metadata": "^0.1.2"
  }
}

我在我的 tsconfig 文件中激活了声明生成,但我真的不明白如何获得一个允许像这样导入模块的声明文件:

import * as Mapper from "mysql-metadata-mapper"

我希望有人能帮我解决这个问题,因为这让我非常抓狂。

@Update

这些是生成的 .d.ts 文件:

index.d.ts

export * from "./MysqlMapper";

MysqlMapper.d.ts

import * as Q from "q";
import * as Mysql from "mysql";
export declare class MysqlMapper {
    private _config;
    private openConnection();
    private createSelectAllQuery(constructor);
    getAll<T>(constructor: any): Q.Promise<Array<T>>;
    constructor(config: Mysql.IConnectionConfig);
}

如何获取声明文件?

【问题讨论】:

  • 你可以在这里发布自动生成的声明为这个模块产生的内容吗?
  • 我知道这是一个很老的问题,但对于后来遇到这个问题的其他人(就像我上周所做的那样),你可能会发现这个 typescript 样板项目很有帮助:github.com/bitjson/typescript-starter

标签: javascript node.js typescript commonjs


【解决方案1】:

我建议您制作自己的声明文件:(例如globals.d.ts

declare module 'mysql-metadata-mapper' {
    import * as mapper from './MysqlMapper';
    export = mapper;
}

然后您可以参考此声明文件,例如 /// &lt;reference path="../globals.d.ts" /&gt;

并根据需要导入模块:

import * as Mapper from 'mysql-metadata-mapper'

我不能 100% 确定这是否是最干净的解决方案,但至少它应该像你想要的那样工作。

【讨论】:

  • 首先感谢您的回答,但是您的建议有一些问题,首先不允许元数据映射器中的-,没问题我改了名字。但是现在我在导入语句中遇到错误:环境模块声明中的导入或导出声明无法通过相对模块名称引用模块。
  • 我明白了 - 我没有用名称中的破折号对其进行测试。您是否尝试在没有 './' 的情况下导入?
  • 是的,我做到了,但模块不是这样找到的
  • 经过一番研究,通过声明环境模块似乎无法以这种方式工作。必须有另一种方法 - 但我现在也没有建议。我会尽快回到这个答案。
  • 好的,谢谢你的打扰,我已经检查了其他节点模块的定义文件,但我没有落后于系统:/
猜你喜欢
  • 2014-01-02
  • 2020-10-20
  • 2016-12-20
  • 1970-01-01
  • 2013-09-25
  • 2016-06-23
  • 1970-01-01
  • 2012-10-09
  • 2022-07-05
相关资源
最近更新 更多