考虑一下,对于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;
...但是由于打字稿的'import'语义有些奇怪,因此看来您只能使用'import .. = require()'语句作为别名模块。尝试致电:
/// <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(...);
使用export =
。
定义:
declare module 'glob' {
function globs(paths: string, options: any, callback: (err: any, files: string[]) => void): any;
export = globs;
}
用法(启用esModuleInterop):
import glob from 'glob';
glob("*.js", {}, (err, files) => { });
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句