如何从打印脚本使用 npm 模块?

我在尝试打字。它在 hello world 阶段工作得很好。我现在尝试使用一个 npm 模块:

index.ts =

import _ = require('lodash')


console.log(_.toUpper('Hello, world !'))

这样行不通:

  • - > Cannot find module 'lodash'. (2307)
  • - > Cannot find module 'lodash'. (2307)

Looking at typescript documentation and in google didn't help. Other S/O questions are either unanswered (给你 and 给你) or unrelated.

Elements :

  • 最新版本1.8
  • 是的,loash 已安装 npm i --save lodash并存在于我的文件系统中(已选中)
  • 我还做了 typings i --save lodash
  • 变体 import * as _ from 'lodash'const _ = require('lodash')也不起作用
  • 我尝试调整 tsconfig.json 选项,正如在其他答案中建议的 "moduleResolution": "node""module": "commonjs",正如在一些答案中建议的那样,仍然不起作用

我们如何使用打印脚本中的 npm 包? ?

102215 次浏览

非常感谢你的回答!然而,到了2018年,它已经过时了。读者们,看看其他的答案。

There are several ways to import modules from npm. But if you don't get typings, tsc will always complain that it can't find the module you are requiring (even if transpiled js 实际上 working).

  • 如果您确实有类型并且没有使用 tsconfig.json,那么使用 reference导入类型:

    /// <reference path="path/to/typings/typings.d.ts" />
    
    
    import * as _ from 'lodash`;
    
    
    console.log(_.toUpper('Hello, world !'))
    
  • If you are using a tsconfig.json file, be sure to have your typings file included (or not excluded, your choice), and make the import like on the previous example.

In the case when there is no available typings. You have two choices: write your own on a .d.ts file, or ignore type checking for the library.

To completely ignore the type checking (this is no the recommended way), import the library on a variable of type any.

 const _: any = require('lodash');


console.log(_.toUpper('Hello, world !'))

tsc将报告 require不存在。请提供 node类型,或者 declare类型以丢弃该错误。

You're probably missing the 声明文件.

有关更多信息,请参见 绝对打字


试试这个:

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

现在你可以进口了。

import _ from 'lodash';

如果您导入的模块具有 多重出口,您可以这样做:

import { Express, Router } from 'express';

如果要导入 “没有默认导出”的模块需要这样做:

import * as http from 'http';

[2018/12]我在2016年提出的这个问题有了新的、最新的答案,尽管答案已经过时,但仍然显示出很多活动。

长话短说,TypeScript 需要 类型资料关于你的包的代码(也就是“ 类型声明文件类型声明文件”也就是“类型”) ,并且正确地告诉你,否则你将失去 TypeScript 的全部意义。以下按照最佳做法的顺序列出了提供或选择不提供这些服务的几种解决办法:


解决方案0 : 模块已经提供了类型:

"typings": "dist/index.d.ts",

它已经启用了 TypeScript。如果您正在阅读本页,那么很可能不是这种情况,所以让我们继续..。


解决方案1 : 使用来自 绝对打字的社区贡献的类型:

npm add -D @types/foo

如果成功了,就中大奖了!现在已经有了类型,可以使用模块了。如果 npm 抱怨找不到模块@type/foo,那么让我们继续..。


解决方案2 : 提供关于这个模块的自定义类型(带有一个零工作的选项)

  1. 在项目的根目录中创建一个名为“ typeings-custom”的文件夹
  2. 在 tsconfig.json 中引用此文件夹的内容:
"include": [
"./typings-custom/**/*.ts"
]
  1. Create a file with this exact name: foo.d.ts [foo = the name of the module] with the content:
declare module 'foo'

您的 TypeScript 代码现在应该可以编译了,尽管没有类型信息(TypeScript 考虑类型为“ any”的 foo 模块)。

您还可以尝试自己编写类型信息,查看 官方文件和/或来自 绝对打字的示例。如果您这样做了,可以考虑将您的输入直接贡献到模块(如果模块作者接受的话,则为解决方案0) ,或者贡献到 Definition itelyType (解决方案1)

这招对我很管用。

  1. 创建一个名为“ typeings”的文件夹。
  2. 在类型文件夹中,创建一个文件名 Module-name. d.ts,它包含:

    declare module "module-name";

  3. 在 tsconfig.json 中,请参考该文件夹

    “ typeRoots”: [ ”, “ . ./node _ module/@types” ]

我一直得到这个错误,没有一个答案适合我 ,但我发现了一些东西,当你想使用打印脚本中的节点模块时,安装它们

$npm install @types/<module_name>

比如说

npm install @types/cheerio

而不是说

npm install cheerio