Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs TypeScript编译器忽略导入的角度转换模块_Angularjs_Typescript_Typescript1.8 - Fatal编程技术网

Angularjs TypeScript编译器忽略导入的角度转换模块

Angularjs TypeScript编译器忽略导入的角度转换模块,angularjs,typescript,typescript1.8,Angularjs,Typescript,Typescript1.8,我正在将Angular1.5项目转换为TypeScript,在导入angularTranslate时遇到问题 我尝试导入这两种内容,如下所示: import * as angular from "angular"; import * as angularTranslate from "angular-translate"; console.log(angular, angularTranslate); 我正在使用从安装的打字机 当我使用TypeScript 1.8(模块:“commonjs”

我正在将Angular1.5项目转换为TypeScript,在导入
angularTranslate
时遇到问题

我尝试导入这两种内容,如下所示:

import * as angular from "angular";
import * as angularTranslate from "angular-translate";

console.log(angular, angularTranslate);
我正在使用从安装的打字机

当我使用TypeScript 1.8(
模块:“commonjs”
)编译时,它会发出以下JavaScript:

"use strict";
var angular = require("angular");
console.log(angular, angularTranslate);
正如您所看到的,即使引用了
angularTranslate
导入,它也已删除,并且类似使用的
angular
导入也被保留。这会导致运行时错误
参考错误:未定义angularTranslate
。这对巴贝尔很管用。我应该如何导入
angularTranslate

编辑:

这也不会排放任何东西:

import angularTranslate = require("angular-translate");
但这会产生预期的结果:

let angularTranslate = require("angular-translate");

在TypeScript中,是不是有什么问题导致无法使用
import

angular 1.5不支持JS或UMD的模块结构(它有自己的模块系统)。所以,如果您从“angular”导入某些内容,您只是从环境模块声明中的定义类型文件导入类型,typescript transpiler能够识别出无需将CommonJS导入定义发送到结果JS(只导入声明)。但是,如果您通过CommonJS required语法(或ES6 import“module”)直接定义导入,则会创建副作用导入,在模块加载器或绑定器加载所需模块时执行angular脚本。

问题在于“angular translate”模块导出名称空间。作为临时解决方案,您可以引用angular-translate.d.ts或fork的旧版本,并手动修复它。

//导入angular-translate

import angularTranslate from 'angular-translate';
然后不要使用引号:

var app = angular.module('myApp', [angularTranslate]);

您是否尝试过简单的
导入“角度平移”(建议)?我认为问题在于“angular translate”模块导出了一个名称空间。我还没有尝试将导入作为副作用,这可能是为了防止剥离导入,但是我无法引用导入的模块。@AlekseyL。有意思,所以基本上打字是错的?使用Babel时,我发现从“angular translate”
导入angularTranslate确实为我提供了用于angular依赖项注入器的预期字符串
“pascalprecht.translate”
,只是TypeScript在编译步骤中没有保留这一点。有解决办法吗?似乎是我(和其他人)问题的根源。谢谢你的回答,但这不是真的。Angular 1.5可以与ES6模块一起使用,这就是我使用它的方式,它可以工作。大多数第三方角度库导出角度依赖项名称,因此您只需导入该名称。事实上,即使是
angular translate
也是这样工作的,它也适用于Babel,只是不适用于TypeScript。我知道Babel有一些神奇的模块兼容性层,但即使在TypeScript中,我的所有其他第三方angular库都是这样工作的,除了
angular translate
。为什么?你好,朋友,我同意你的看法,但你不明白我的意思,我尽力向你解释,为什么当transpiler发现你只导入类型(接口)时,TypeScript不会发出一些导入。情况不同,当解析模块(在您的例子中是环境模块)导出一些常量、值或函数(甚至是构造函数)时,您不会给transpiler跳过此类导入的机会。我认为在角度转换的情况下,问题在于导出类型别名,但我当然不确定。所以自己使用副作用导入或热修复角度转换定义类型文件。。。。