如何使用打字稿编写节点模块?
因此,另一个问题(如何使用打字稿 导入 模块)的一般答案是:
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