Off*_*rmo 73 node.js npm typescript tsc
我正在拍打打字稿.它在hello world阶段运行良好.我现在正在尝试使用npm模块:
index.ts =
import _ = require('lodash')
console.log(_.toUpper('Hello, world !'))
Run Code Online (Sandbox Code Playgroud)
这不起作用:
tsc index.ts - > Cannot find module 'lodash'. (2307)node-ts index.js - > Cannot find module 'lodash'. (2307)看看打字稿文档和谷歌没有帮助.其他S/O问题要么没有答案(此处和此处)或不相关.
元素:
npm i --save lodash并存在于我的文件系统中(已选中)typings i --save lodashimport * as _ from 'lodash'或const _ = require('lodash')不起作用"moduleResolution": "node"并且"module": "commonjs"如某些答案所示,仍然无法正常工作我们如何在打字稿中使用npm包?
Bla*_*kus 55
[编辑]非常感谢您的回答!但是,截至2018年,它已经过时了.读者,看看其他答案.
有几种方法可以从npm导入模块.但是如果你没有得到打字,tsc总会抱怨它找不到你需要的模块(即使转换后的js 实际上正在工作).
如果您确实有类型并且不使用a tsconfig.json,请使用reference导入类型:
/// <reference path="path/to/typings/typings.d.ts" />
import * as _ from 'lodash`;
console.log(_.toUpper('Hello, world !'))
Run Code Online (Sandbox Code Playgroud)如果您使用的是tsconfig.json文件,请确保包含您的打字文件(或不包括您的选择),并import在前一个示例中进行类似操作.
在没有可用的打字的情况下.您有两种选择:在.d.ts文件上编写自己的选项,或忽略库的类型检查.
要完全忽略类型检查(这不是推荐的方法),请在类型变量上导入库any.
const _: any = require('lodash');
console.log(_.toUpper('Hello, world !'))
Run Code Online (Sandbox Code Playgroud)
tsc会抱怨require不存在.提供node打字或declare放弃错误.
Off*_*rmo 33
[2018/12]我在2016年提出的这个问题的新的,最新的回答,尽管有过时的答案,仍然显示了很多活动.
简而言之,TypeScript需要有关包的代码的类型信息(也称为" 类型声明文件 "又名"typings"),并且正确地告诉您,否则您将失去TypeScript的全部意义.有几种解决方案可以提供或退出它们,按照最佳实践的顺序列在此处:
解决方案0:模块已经提供了类型.如果它的package.json包含这样的行:
"typings": "dist/index.d.ts",
Run Code Online (Sandbox Code Playgroud)
它已经启用了TypeScript.如果你正在阅读这个堆栈溢出页面,很可能不是这样,所以让我们继续......
解决方案1:使用来自DefinitelyTyped的社区贡献的类型.对于模块"foo",试试这个:
npm add -D @types/foo
Run Code Online (Sandbox Code Playgroud)
如果它的工作,累积奖金!您现在有了打字,可以使用您的模块.如果npm抱怨它找不到模块@ types/foo,那就让我们继续......
解决方案2:提供有关此模块的自定义类型.(可选择零努力)
"include": [
"./typings-custom/**/*.ts"
]
Run Code Online (Sandbox Code Playgroud)
declare module 'foo'
Run Code Online (Sandbox Code Playgroud)
您的TypeScript代码现在应该编译,虽然没有类型信息(TypeScript认为类型为"any"的foo模块).
您还可以尝试自己编写类型信息,查看官方文档和/或DefinitelyTyped中的示例.如果你这样做,可以考虑直接在模块中提供您的输入(解决方案0,如果模块作者接受)或者DefinitelyTyped(解决方案1)
Der*_*ike 15
你可能错过了宣言文件.
有关详细信息,请参阅DefinitelyTyped.
试试这个:
npm install --save lodash
npm install --save @types/lodash
Run Code Online (Sandbox Code Playgroud)
现在你可以导入了.
import _ from 'lodash';
Run Code Online (Sandbox Code Playgroud)
如果要导入的模块有多个导出,则可以执行以下操作:
import { Express, Router } from 'express';
Run Code Online (Sandbox Code Playgroud)
如果您要导入的模块"没有默认导出",则需要执行以下操作:
import * as http from 'http';
Run Code Online (Sandbox Code Playgroud)
它对我有用。
在 Typings 文件夹中,创建一个文件名module-name.d.ts。它包含了:
declare module "module-name";
在 tsconfig.json 中,参考文件夹
"typeRoots": [
"./typings",
"../node_modules/@types"
]
| 归档时间: |
|
| 查看次数: |
46081 次 |
| 最近记录: |