我目前遇到的打字稿编译问题。
我正在使用OpenLayers(3.0.0 Beta 1)上的最新版本,我尝试将其集成到我的AMD模块中。我确切地说我并不熟悉AMD机制和打字稿。
为了管理我的地图,感谢OpenLayers3,我正在创建一个新模块:
OlMap.ts
/// <reference path="../_import.ts" />
import ol = require('ol');
/*
* Custom class used to wrap the OpenLayers Map class.
* This is used to extend the functionnalities (i.e. controls)
* Defined following the chaining method pattern.
*
* @module OlMap
* @class
*/
class OlMap {
// My code here
}
为了更容易使用OpenLayers3(不是AMD),我创建了一个名为 ol3.d.ts 的定义文件,它被引用到我的_import.ts中
我的问题是,当我尝试编译时,我收到错误:
OlMap.ts<3.1> error TS2071: Unable to resolve external module ''ol''
OlMap.ts<3.1> error TS2072: Module cannot be aliased to a non-module type.
编译文件如下:
/// <reference path="../_import.ts" />
define(["require", "exports", 'ol'], function(require, exports, __ol__) {
var ol = 'ol';
但它应该更像是:
/// <reference path="../_import.ts" />
define(["require", "exports", 'ol'], function(require, exports, __ol__) {
var ol = __ol__;
如果我手动编辑生成的javascript文件,就像前面的代码一样(var ol = __ ol __),我没有依赖项问题,但生成的文件会因编译错误而产生错误。
有什么想法吗? 感谢
编辑: 我不将OpenLayer javascript文件集成到HTML中。 OpenLayer不是AMD库,所以我使用的是RequireJS的Shim。
答案 0 :(得分:1)
我假设您在index.html中明确包含openLayers3的JS文件(即不使用requireJS)。在这种情况下,您可以通过在根文件夹中创建名为ol.ts
的文件(require
查找它)并将以下内容放入其中来解决问题:
/// <reference path="./path/to/ol.d.ts" />
export = ol;
这应该以AMD友好的方式重新导出OpenLayers的window.ol
对象。
答案 1 :(得分:1)
您需要将其声明为外部加载的模块。即:
declare module 'ol'{
var openlayers:any;
export = openlayers;
}
import ol = require('ol');
class OlMap {
// My code here
}
生成:
define(["require", "exports", 'ol'], function(require, exports, __ol__) {
var ol = __ol__;
var OlMap = (function () {
function OlMap() {
}
return OlMap;
})();
});
答案 2 :(得分:0)
好的,我找到了解决方案。
我没有从相关的AMD模块加载OL3,而是尝试将其加载到应用程序引导程序中,就像我为AngularJS和jQuery所做的那样。 垫片机制看起来很有效。
尽管如此,我仍然不知道为什么Typescript构建器拒绝编译我的应用程序。 谢谢你的帮助。