Compiler construction 使用typescript编译AMD时出错

Compiler construction 使用typescript编译AMD时出错,compiler-construction,requirejs,typescript,amd,openlayers-3,Compiler Construction,Requirejs,Typescript,Amd,Openlayers 3,我目前在编译typescript时遇到了一个问题 我使用的是最新版本(3.0.0 Beta 1),我试图将其集成到我的AMD模块中。我明确表示,我并不真正熟悉AMD的机制和打字脚本 为了管理借助OpenLayers3创建的地图,我正在创建一个新模块: OlMap.ts /// <reference path="../_import.ts" /> import ol = require('ol'); /* * Custom class used to wrap the Open

我目前在编译typescript时遇到了一个问题

我使用的是最新版本(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
}
//
导入ol=需要('ol');
/*
*用于包装OpenLayers映射类的自定义类。
*这用于扩展功能性(即控制)
*按照链接方法模式定义。
*
*@OlMap模块
*@级
*/
类OlMap{
//我的代码在这里
}
为了简化OpenLayers3(不是AMD)的使用,我创建了一个名为ol3.d.ts定义文件,该文件被引用到my\u 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.
OlMap.ts错误TS2071:无法解析外部模块“ol”
OlMap.ts错误TS2072:模块不能别名为非模块类型。
编译文件如下所示:

/// <reference path="../_import.ts" />
define(["require", "exports", 'ol'], function(require, exports, __ol__) {
    var ol = 'ol';
//
定义([“require”、“exports”、“ol”]、函数(require、exports、ol){
var ol='ol';
但它应该更像:

/// <reference path="../_import.ts" />
define(["require", "exports", 'ol'], function(require, exports, __ol__) {
    var ol = __ol__;
//
定义([“require”、“exports”、“ol”]、函数(require、exports、ol){
var ol=uuu ol_uuu;
如果我像前面的代码一样手动编辑生成的javascript文件(var ol=_;ol__;;),我没有依赖项问题,但是生成的文件会由于编译错误而产生错误

有什么想法吗? 谢谢

编辑:
我没有将OpenLayer javascript文件集成到HTML中。OpenLayer不是AMD库,因此,我使用的是RequireJS的垫片。

我假设您在index.HTML中显式包含openLayers3的JS文件(即不使用RequireJS)。在这种情况下,您可以通过在根文件夹中创建一个名为
ol.ts
的文件(其中
require
查找该文件)并在其中放入以下内容来解决此问题:

//
出口=ol;

这应该以AMD友好的方式重新导出OpenLayers的
window.ol
对象。

您需要将其声明为外部加载的模块。例如:

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;
    })();
});

好的,我找到了解决办法

我没有从相关的AMD模块加载OL3,而是尝试在应用程序引导时加载它,就像我对AngularJS和jQuery所做的那样。 垫片机构看起来工作正常

尽管如此,我仍然不知道为什么Typescript生成器拒绝编译我的应用程序。
谢谢你的帮助。

谢谢你的回答。事实上,我正试图从index.html中删除OpenLayers3 js文件,并改用RequireJS。通过文件链接到html,这是可行的,但这是一个问题further@AdrienSaunier您可能仍然希望保留该文件以满足Typescript的要求,同时允许require/r、 js通过垫片处理外部库。谢谢你的回答。我已经用一个文件.d.ts定义了OpenLayers的新版本(受项目启发)。经过一些测试,我的代码工作正常,但错误肯定来自tsc的构建。我不知道为什么,但当我将声明放在一个单独的文件中时(我的定义文件被很好地引用)tsc失败。