我正在试一试打字稿。它在 hello world 阶段运行良好。我现在正在尝试使用 npm 模块:
index.ts
=
import _ = require('lodash')
console.log(_.toUpper('Hello, world !'))
这不起作用:
tsc index.ts
->Cannot find module 'lodash'. (2307)
node-ts index.js
->Cannot find module 'lodash'. (2307)
查看打字稿文档和谷歌并没有帮助。其他 S/O 问题要么没有答案( 此处 和 此处),要么无关。
元素:
- 打字稿 1.8 最新
- 是的,lodash 已安装
npm i --save lodash
并且存在于我的文件系统中(已选中) - 我也做了
typings i --save lodash
- 变体
import * as _ from 'lodash'
或const _ = require('lodash')
也不起作用 - 我尝试按照其他答案中的建议调整 tsconfig.json 选项
"moduleResolution": "node"
和"module": "commonjs"
正如一些答案中的建议,仍然不起作用
我们如何在 typescript 中使用 npm 包?
原文由 Offirmo 发布,翻译遵循 CC BY-SA 4.0 许可协议
[2018⁄12] 我在 2016 年提出的这个问题的最新答案,尽管答案已经过时,但仍然显示出很多活动。
长话短说,TypeScript 需要关于你的包代码的 类型信息(又名“ 类型声明文件”又名“类型”),并且正确地告诉你,否则你会失去 TypeScript 的全部意义。有几种解决方案可以提供或选择退出,此处按最佳实践顺序列出:
解决方案 0 :模块已经提供了类型。如果它的 package.json 包含这样的一行:
它已经支持 TypeScript。如果您正在阅读此页面,则很可能不是这种情况,所以让我们继续…
解决方案 1 :使用来自社区贡献的类型 肯定 类型。对于模块“foo”,试试这个:
如果它有效,大奖!您现在有了类型并且可以使用您的模块。如果 npm 抱怨它找不到模块 @types/foo,让我们继续…
解决方案 2 :提供有关此模块的自定义类型。 (可以选择做零努力)
您的 TypeScript 代码现在应该可以编译了,尽管没有类型信息(TypeScript 考虑类型为“any”的 foo 模块)。
您也可以尝试自己编写类型信息,查看 官方文档 和/或来自 DeveloplyTyped 的示例。如果您这样做,请考虑将您的类型直接贡献到模块中(解决方案 0,如果模块作者接受)或绝对类型(解决方案 1)