如何使用打字稿编写节点模块?

道格

因此,另一个问题(如何使用打字稿导入模块)的一般答案是:

1)创建blah.d.ts定义文件。

2)使用:

/// <reference path="./defs/foo/foo.d.ts"/>
import foo = require("foo");

至关重要的是,您需要node_modules中的某个位置同时加载文件foo.d.ts和foo.js。并且NAME foo必须与两者完全匹配。现在...

我想回答的问题是如何编写一个可以以这种方式导入的打字稿模块?

可以说我有一个像这样的模块:

- xq/
- xq/defs/Q.d.ts
- xq/index.ts
- xq/base.ts
- xq/thing.ts

我想从base.ts中导出带有类'Base'的模块'xq',从thing.ts中导出'Thing'的模块。

如果这是javascript中的节点模块,则我的index.ts将类似于:

var base = require('./base');
var thing = require('./thing');
module.exports = {
  Base: base.Base,
  Thing: thing.Thing
};

让我们尝试使用类似的打字稿文件:

import base = require('./base');
export module xq {
    export var base = base.Base;
}

调用它:

tsc base.ts index.ts things.ts ... --sourcemap --declaration --target ES3 
                                   --module commonjs --outDir dist/xq

怎么了?好吧,我们得到了base.d.ts:

export declare class Base<T> {
  ...
}

和无用的索引。d.ts:

export declare module xq {
    var Base: any; // No type hinting! Great. :(
}

完全无效的javascript,不会触发模块导入:

(function (xq) {
    xq.base = xq.base.Base;
})(exports.xq || (exports.xq = {}));
var xq = exports.xq;

我已经尝试了很多关于主题的变体,而我唯一可以使用的是:

declare var require;
var base = require('./base');
export module xq {
    export var base = base.Base;
}

...但是那显然完全破坏了类型检查器。

所以。

Typescript很棒,但是这个模块的东西完全糟透了。

1)是否可以使用内置的定义生成器(我很怀疑)

2)您如何手工操作?我已经在.d.ts文件中看到了import语句,我认为这意味着有人已经知道如何做到这一点。那些工作如何?您如何为其中带有导入语句的声明的模块编写打字稿?

(例如,我怀疑执行模块声明的正确方法是:

/// <reference path="base.d.ts" />
declare module "xq" {
  import base = require('./base'); 
  module xq {
    // Some how export the symbol base.Base as Base here
  }
  export = xq;
}

...但是我不知道要输入的打字稿是什么)。

巴萨拉特

对于JavaScript:

var base = require('./base');
var thing = require('./thing');
module.exports = {
  Base: base.Base,
  Thing: thing.Thing
};

文字脚本:

import base = require('./base');
import thing = require('./thing');
var toExport = {
  Base: base.Base,
  Thing: thing.Thing
};
export = toExport;

甚至这个打字稿:

import base = require('./base');
import thing = require('./thing');
export var Base = base.Base;
export var Thing = thing.Thin;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用打字稿编写marionettejs模块?

来自分类Dev

如何使用AMD模块在普通js中创建打字稿类的对象实例

来自分类Dev

如何使用打字稿编写节点模块?

来自分类Dev

如何使用带有Browserify的打字稿模块?

来自分类Dev

如何为导出函数的节点模块编写打字稿定义文件?

来自分类Dev

打字稿外部模块

来自分类Dev

如何在打字稿中正确创建和导入节点模块

来自分类Dev

从外部节点模块导入打字稿

来自分类Dev

无法使用打字稿导入节点类型的模块

来自分类Dev

遇到错误:如何从打字稿中正确使用已翻译和键入的打字稿npm模块?

来自分类Dev

使用打字稿的节点项目的首选模块语法

来自分类Dev

如何模拟使用在节点模块中导出的导入(ES6打字稿)的外部注入库进行单元测试

来自分类Dev

如何使用常规脚本标签运行模块化打字稿输出?

来自分类Dev

如何使用打字稿支持同一模块的多个版本?

来自分类Dev

如何编写抽象打字稿泛型?

来自分类Dev

无法使用React解析打字稿模块

来自分类Dev

我如何使用Angular中的打字稿获取JSON中特定嵌套节点的数量?

来自分类Dev

我如何使用Angular中的打字稿获取JSON中特定嵌套节点的数量?

来自分类Dev

如何在打字稿中进行模块解析以输出到节点?

来自分类Dev

打字稿内部模块

来自分类Dev

如何使用AMD模块在普通js中创建打字稿类的对象实例

来自分类Dev

如何使用带有浏览器功能的打字稿模块?

来自分类Dev

打字稿外部模块

来自分类Dev

从外部节点模块导入打字稿

来自分类Dev

使用打字稿的节点项目的首选模块语法

来自分类Dev

打字稿2无法解析外部节点模块

来自分类Dev

如何编写打字稿模块定义,以便将模块依赖项导出为其成员?

来自分类Dev

打字稿+节点+快递?

来自分类Dev

如何包含打字稿模块声明

Related 相关文章

  1. 1

    如何使用打字稿编写marionettejs模块?

  2. 2

    如何使用AMD模块在普通js中创建打字稿类的对象实例

  3. 3

    如何使用打字稿编写节点模块?

  4. 4

    如何使用带有Browserify的打字稿模块?

  5. 5

    如何为导出函数的节点模块编写打字稿定义文件?

  6. 6

    打字稿外部模块

  7. 7

    如何在打字稿中正确创建和导入节点模块

  8. 8

    从外部节点模块导入打字稿

  9. 9

    无法使用打字稿导入节点类型的模块

  10. 10

    遇到错误:如何从打字稿中正确使用已翻译和键入的打字稿npm模块?

  11. 11

    使用打字稿的节点项目的首选模块语法

  12. 12

    如何模拟使用在节点模块中导出的导入(ES6打字稿)的外部注入库进行单元测试

  13. 13

    如何使用常规脚本标签运行模块化打字稿输出?

  14. 14

    如何使用打字稿支持同一模块的多个版本?

  15. 15

    如何编写抽象打字稿泛型?

  16. 16

    无法使用React解析打字稿模块

  17. 17

    我如何使用Angular中的打字稿获取JSON中特定嵌套节点的数量?

  18. 18

    我如何使用Angular中的打字稿获取JSON中特定嵌套节点的数量?

  19. 19

    如何在打字稿中进行模块解析以输出到节点?

  20. 20

    打字稿内部模块

  21. 21

    如何使用AMD模块在普通js中创建打字稿类的对象实例

  22. 22

    如何使用带有浏览器功能的打字稿模块?

  23. 23

    打字稿外部模块

  24. 24

    从外部节点模块导入打字稿

  25. 25

    使用打字稿的节点项目的首选模块语法

  26. 26

    打字稿2无法解析外部节点模块

  27. 27

    如何编写打字稿模块定义,以便将模块依赖项导出为其成员?

  28. 28

    打字稿+节点+快递?

  29. 29

    如何包含打字稿模块声明

热门标签

归档