从Typescripts中的js文件导入var

时间:2018-02-07 18:19:03

标签: typescript typescript-typings typescript2.0

对于上下文(虽然它并不重要),我正在尝试将SVGMorpheus导入到打字稿项目(Angular 2)中。

SVGMorpheus只是一个全球性的。它被声明如下:

import * as SVGMorpheus from "./path/to/svg-morpheus"

即。分配给全球的标准老派javascript IIFE。在我的项目中,我试图将其导入:

console.log(SVGMorpheus); //Outputs "{}"

这样可以正常工作并且没有错误,但SVGMorpheus只是一个空对象。

public class FilterArgResolver implements HandlerMethodArgumentResolver { ExampleMatcher startMatcher = ExampleMatcher.matching() .withStringMatcher(ExampleMatcher.StringMatcher.STARTING); @Override public boolean supportsParameter(MethodParameter param) { return param.getParameterAnnotation(Filter.class) != null; } @Nullable @Override public Object resolveArgument(MethodParameter param, @Nullable ModelAndViewContainer mavContainer, NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception { Class clazz = param.getParameterAnnotation(Filter.class).value(); Object o = clazz.getConstructor().newInstance(); ServletRequestDataBinder b = (ServletRequestDataBinder) binderFactory. createBinder(webRequest, o, "filter"); b.bind((ServletRequest) webRequest.getNativeRequest()); BindingResult r = b.getBindingResult(); Object t = r.getTarget(); return Example.of(t, startMatcher); } }

任何使用它的尝试都会导致错误。

有谁知道我做错了什么?我还添加了一个typings.d.ts文件,但没有帮助。 SVGMorpheus不支持打字或任何形式的UMD表格。

2 个答案:

答案 0 :(得分:0)

这不是来自Typesciprt的特殊问题,而是在导入/导出文件的所有情况下都可能发生的一般问题。答案是并非所有的javascript文件都可以导出。特别是,在这种情况下,答案是“否”。我将假设您正在使用Webpack,如果不这样做,我强烈建议您最终使用Webpack。

从Webpack人员(https://github.com/webpack/docs/wiki/shimming-modules)编写的官方文档中,有一种解决此案例的方法,其中文件不支持现代导入/导出技术。

您需要“exports-loader”才能使IIFE全局模块准备好导出到其他脚本。

var SVGMorpheus = require('./path/to/svg-morpheus'); // Wrong
var SVGMorpheus = require('exports-loader?SVGMorpheus!./path/to/svg-morpheus'); // Good

希望这能回答你的问题。感谢。

答案 1 :(得分:0)

这是一个角度cli问题。我没有用编译器注册脚本。 将node_module添加到angular-cli.json文件内的app对象中的scripts数组中就可以了:

{
   ...
   "apps": [
      ...app definition stuff...
      "scripts": [
          "path/to/external/module"
      ]   
   ]
}

请注意,这适用于任何外部IIFE类型的导入。不需要其他代码更新(原始邮政编码有效)。