网站搜索

javascript - AngularJS + TypeScript:未捕获的类型错误:无法读取未定义的属性 'module'


我正在尝试在 AngularJS 1.x 应用程序中使用 TypeScript。

我的应用程序已经使用 Webpack 作为模块加载器,所以我配置它来处理 TypeScript 编译(在将所有 *.js 源文件重命名为 *.ts 之后),并且我设法让它工作。所以它可以无错误地编译并生成我的 JavaScript 输出文件。

唯一的问题是,当我在浏览器上运行该应用程序时,它无法工作,并且我收到这个控制台错误:

未捕获的类型错误:无法读取未定义的属性 'module'

以及:

未捕获的错误:[$injector:modulerr] 无法实例化模块 myModuleName,原因:错误:[$injector:nomod] 模块 'myModuleName' 不可用!你要么拼写模块名错误,要么忘记加载它。如果注册模块,请确保将依赖项作为第二个参数指定。

我猜这个对象 angular 出于某种原因是 null,当我尝试访问 angular.module 时,它就会报错。

我不明白为什么会这样,因为当我在代码中使用 import angular from 'angular/angular'; 时,它可以成功编译。

完整的源代码可以在这里获取。

Webpack 输出:

哈希: 824157db8ed6acf47fc1 版本: webpack 2.2.1 时间: 2242毫秒 资源 大小 模块块 模块块名称 othello-bundle.js 1.27 MB 0 [已发出] [大] app othello-bundle.js.map 1.51 MB 0 [已发出] app [0] ./~/angular/angular.js 1.24 MB {0} [已构建] [5] ./app/services/othello_AI.ts 8.65 kB {0} [已构建] [6] ./app/services/othello_handler.ts 9.3 kB {0} [已构建] [7] ./app/index.ts 723 字节 {0} [已构建] + 4 个隐藏模块

答案#1

我终于找到了解决办法。

在使用 TypeScript 时,需要使用以下方式导入 AngularJS:

import * as angular from 'angular';

问题是我仍然像使用 es6 那样导入它:

import angular from 'angular';