当前位置: 首页 > 面试题库 >

将lodash导入angular2 +打字稿应用程序

施德运
2023-03-14
问题内容

我很难尝试导入lodash模块。我已经使用npm + gulp设置了我的项目,并不断碰壁。我尝试过常规lodash,但也尝试过lodash-es。

lodash npm软件包:(在软件包根文件夹中有一个index.js文件)

import * as _ from 'lodash';

结果是:

error TS2307: Cannot find module 'lodash'.

lodash-es npm软件包:(在package根文件夹的lodash.js中具有默认输出)

import * as _ from 'lodash-es/lodash';

结果是:

error TS2307: Cannot find module 'lodash-es'.

gulp任务和webstorm都报告相同的问题。

有趣的是,这没有返回错误:

import 'lodash-es/lodash';

…但是当然没有“ _” …

我的tsconfig.json文件:

{
  "compilerOpthtml" target="_blank">ions": {
    "target": "es5",
    "module": "system",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false
  },
  "exclude": [
    "node_modules"
  ]
}

我的gulpfile.js:

var gulp = require('gulp'),
    ts = require('gulp-typescript'),
    uglify = require('gulp-uglify'),
    sourcemaps = require('gulp-sourcemaps'),
    tsPath = 'app/**/*.ts';

gulp.task('ts', function () {
    var tscConfig = require('./tsconfig.json');

    gulp.src([tsPath])
        .pipe(sourcemaps.init())
        .pipe(ts(tscConfig.compilerOptions))
        .pipe(sourcemaps.write('./../js'));
});

gulp.task('watch', function() {
    gulp.watch([tsPath], ['ts']);
});

gulp.task('default', ['ts', 'watch']);

如果我正确理解,则tsconfig中的moduleResolution:’node’应该将import语句指向node_modules文件夹,其中安装了lodash和lodash-
es。我还尝试了许多不同的导入方式:绝对路径,相对路径,但似乎没有任何效果。有任何想法吗?

如有必要,我可以提供一个小的zip文件来说明问题。


问题答案:

从Typescript 2.0开始,以下是执行此操作的方法:(不建议使用tsd和打字,而推荐使用以下内容):

$ npm install --save lodash

# This is the new bit here: 
$ npm install --save-dev @types/lodash

然后,在您的.ts文件中:

要么:

import * as _ from "lodash";

或者(由@Naitik建议):

import _ from "lodash";

我不太肯定有什么区别。我们使用并喜欢第一种语法。但是,有些人报告说第一种语法不适用于他们,而其他人则评论说后者的语法与延迟加载的webpack模块不兼容。YMMV。

编辑于2017年2月27日:

根据下面的@Koert,import * as _ from "lodash";是Typescript 2.2.1,lodash 4.17.4和@
types / lodash 4.14.53以来唯一的工作语法。他说,其他建议的导入语法给出错误“没有默认导出”。



 类似资料:
  • 我启动了简单的Angular 2应用程序,一切正常。但当我添加lodash导入并尝试使用它时,我会出现错误,应用程序停止工作,无法找出问题所在。 我在控制台中遇到以下两个错误: 未捕获的语法错误:意外标记 未捕获的语法错误:意外标记 文件夹 指数html tsconfig.json 包裹json

  • 问题内容: 我在这里找到了解决方案:Webpack和Typescript图像导入 但我为此得到错误: 我想我需要以某种方式强制导入,但无法弄清楚如何。我在React中做到这一点。我看到该属性定义为,这就是为什么会弹出错误。 这是代码: HTML: 并基于上述解决方案进行定义: tsconfig: 问题答案: 摆脱该错误的一种方法是通过按如下方式修改d.ts文件: 去掉 或者您可以执行以下操作: 更

  • 问题内容: 我将TypeScript与/一起使用。 对于使用模块,《 TypeScript手册》显示以下语法: 而且文件显示: 我还搜索了MSDN博客,但找不到任何东西。 截至2016年初,哪个更正确?两者之间有什么区别(如果有)? 在哪里可以找到有关要使用的最新语法的信息的最佳来源,以便将来我可以找到此信息? 问题答案: 这些大多是等效的,但有一些限制不是。 创建一个标识符,它是一个 模块对象

  • 我试图在我的应用程序中使用Roboto字体,但遇到了困难.. 我完成了,并将添加到我的React组件中。但仍然无法更改字体。 我试着这样做: 我错过了什么吗?正在寻找一种不需要任何外部css文件的简单方法。。

  • 我正在使用ES6导入语法并导入一个第三方ES5模块,该模块导出一个未命名函数的单个导出: 因为没有默认导出,而是一个匿名函数输出,我必须像这样导入和使用: 这会产生Typescript错误: 错误TS2349:无法调用其类型缺少调用签名的表达式。类型“typeof”没有兼容的调用签名。 我想我之所以会这样是因为我没有正确键入ES5导入(没有公共键入文件)。当我认为该函数是默认导出时,我有以下定义:

  • 问题内容: 在我的react和typescript应用程序中,我使用:。 我如何正确定义类的类型,这样我就不必用来绕过类型系统了? 如果我把我得到: 问题答案: 通常,事件处理程序应使用,例如: 您可以在这里阅读原因(还原“使SyntheticEvent.target通用,而不是SyntheticEvent.currentTarget。”)。 UPD:如@ roger-gusmao所述,它更适合于