我很难尝试导入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所述,它更适合于