使用SystemJS在混合AngularJS / Angular应用程序中进行Lodash。我可以单独指定'_'吗?

时间:2018-01-04 23:21:04

标签: angularjs typescript module lodash ecmascript-5

我有一个使用TypeScript在AngularJS中编写的混合应用程序,我最近转换为混合应用程序,以便Angular也可以在项目中使用。我正在使用SystemJS进行模块加载。

转换后,我在VS2015中收到与Lodash相关的错误

'Cannot find name '_'

我已经查看了以下SO问题,但是没有一个建议的解决方案有效或看起来令人满意:

Importing lodash into angular2 + typescript application

Angular2 and lodash...Cannot find name

我尝试了上面第一个问题的主要建议,即:

删除节点模块文件夹,然后:

$ npm install --save lodash
$ npm install --save @types/lodash

Then, in my .ts file, I add this:

import * as _ from "lodash";

但是这给了我错误'找不到模块'lodash'。

如果我使用以下内容,我不会收到该错误,但我仍然收到错误'找不到姓名'_':

import "lodash";

我的问题是 - 有没有一种方法可以在我的代码中单独指定'_'来解决这个问题? (我真的喜欢完全理解使用import * as _ from“lodash”的问题,即模块加载和赋值'_'的细节是什么?

这是我收到错误的* .ts文件:

import "lodash";

(function () {

var controller = function ( dependency1, dependency2) {

    this.myFunction = (myParam) => {

        this.MyService.getMyModel(myParam).then((model) => {
            this.model = model.Content;

            // can I assign _ so that it works here - if so where and how?
            _.each(this.model.MyEntities, function (m) { return m.showDetails = false; });
....

我的相关tsconfig.json编译器选项是:

  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "lib": [ "es2015", "dom" ]
    ....

当我查看C:\ Program Files(x86)\ Microsoft SDKs \ TypeScript时,我只有1.8。当我咕噜咕噜的项目(使用https://www.npmjs.com/package/grunt-ts)时,它告诉我它正在使用tsc v2.6.2编译,我不明白。我认为VS2015必须使用tsc 1.8(我只有一个tsconfig.json,并且.csproj上没有Typescript配置)。

1 个答案:

答案 0 :(得分:1)

对于visual studio在typescript 1.8上的问题,你需要为visual studio下载一个新版本的typescript插件。

您可以在typescript website download page

上找到visual studio 2015和2017的详细信息

关于lodash问题,我听到了同样的问题。我的理由是,洛达什的进口方式存在不一致之处。当所有代码更改为引用lodash时,如下所示都可以:

import * as _ from "lodash";

我的案例中的所有代码都包括删除引用loadash的第三方组件。我做了调试并找出了实际的原因,但是现在我不记得除了有效的解决方案之外的其他细节。