【发布时间】:2014-07-24 15:11:04
【问题描述】:
考虑一下,对于 toml 节点模块,我可以简单地使用:
// toml.d.ts
declare module TOML {
export function parse(value:string):any;
}
declare module "toml" {
export = TOML;
}
然后:
/// <reference path="../../../../../defs/toml/toml.d.ts"/>
import toml = require('toml');
toml.parse(...);
但是,只导出单个函数的节点模块呢,例如“glob”(https://github.com/isaacs/node-glob)。
该模块的节点使用情况为:
var glob = require("glob")
glob("*.js", {}, callback(err, files) { ... });
你会天真地期望你能做到这一点:
// glob.d.ts
declare function globs(paths:string, options:any, callback:{(err:any, files:string[]):void;
...但是因为 typescripts 的 'import' 语义有点奇怪,看来你只能使用 'import .. = require()' 语句给 modules 起别名。尝试调用:
/// <reference path="../../../../../defs/glob/glob.d.ts"/>
import blog = require('glob');
结果:
error TS2072: Module cannot be aliased to a non-module type.
那么,您将如何为此编写定义文件?
注意。请注意,这是针对使用节点的 commonjs 模块,不是 AMD 模块。
...也是的,我知道你可以通过使用声明破坏类型系统来做到这一点,但我试图避免这种情况:
declare var require;
var glob = require('glob');
glob(...);
【问题讨论】:
标签: typescript commonjs