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

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

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;

以上是 如何使用打字稿编写节点模块? 的全部内容, 来源链接: utcz.com/qa/401098.html

回到顶部