我刚刚使用typescript开始了一个新的nodejs项目。我安装了Typings(https://github.com/typings/typings)并用它来安装节点v4.x和express v4.x的参考文件。
我的节点版本是v4.2.6 我的打字稿版本是v1.7.5
我的项目目录如下:
package.json
tsconfig.json
typings.json
src/
app.ts
typings/
main.d.ts
main/ambient/node/node.d.ts
main/ambient/express/express.d.ts
typings / main.d.ts的内容如下:
/// <reference path="main/ambient/express/express.d.ts" />
/// <reference path="main/ambient/node/node.d.ts" />
tsconfig.json的内容如下:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs"
}
}
typings.json的内容如下:
{
"dependencies": {},
"devDependencies": {},
"ambientDependencies": {
"express": "github:DefinitelyTyped/DefinitelyTyped/express/express.d.ts#dd4626a4e23ce8d6d175e0fe8244a99771c8c3f2",
"node": "github:DefinitelyTyped/DefinitelyTyped/node/node.d.ts#1c56e368e17bb28ca57577250624ca5bd561aa81"
}
}
src / app.ts的内容如下:
'use strict';
///<reference path="../typings/main.d.ts"/>
import * as express from "express";
这非常简单,应该会产生一个基本的应用程序。但是,当我尝试编译时,我收到错误error TS2307: Cannot find module 'express'.
我尝试重新排列打包文件,更改参考路径标记中的相对路径,使用tsconfig.json中的files
字段指示引用路径,而不是在文件中使用内联标记,全部为no无济于事。我还尝试直接在命令行上使用gulp-typescript
,gulp-tsc
和tsc
进行编译。
当我尝试使用诸如crypto
,http
,fs
之类的nodejs内置模块时,我遇到了类似的错误。
这些引用似乎有效 - 我错过了什么?
答案 0 :(得分:19)
三重斜杠指令需要在文件中的任何语句之前。您的"use strict"
序言需要在之后来参考
///<reference path="../typings/main.d.ts"/>
'use strict';
import * as express from "express";
作为你的评论的后续内容,你没有为你的导入获得任何发射:这是因为TypeScript执行导入省略。除非您将模块用于某个值,否则编译器不会发出导入,因为它假定您只需要该模块用于其类型。
答案 1 :(得分:2)
Daniel的回答在技术上是正确的,但基于你的tsconfig main.d.ts
仍然会被选中,所以不会为你解决问题。
那说我确实发现了问题并发送了拉取请求:https://github.com/jereynolds/ts-test/pull/1
您可能应该排除typings
和node_modules
,否则编译将包含重复的标识符(打字)/将会很慢(node_modules)
输入安装serve-static
(express
所需)和mime
(serve-static
所需)。
答案 2 :(得分:1)
我知道这是一个老问题,很抱歉碰到它,但它是谷歌的第一个链接之一。
由于上述问题并没有解决我的问题,我最终解决了这个问题,我以为我会分享......在我的情况下,导致问题的是相对路径。
我的打字在
typings/bootstrap
,
typings/react-dom
,
typings/react
,
等。
react-dom
个人有一个import from 'react'
。要修复我的代码,我必须将其编辑为'../react/react'
。简单!
答案 3 :(得分:1)
以上都不对我有用-所以我希望这会对其他人有所帮助。 (我正在使用VS Code)。
这个问题突然以我的一项服务突然发生在我身上,这在几个模块中都有提及。保存一个完全不相关的组件,该组件不使用该服务后,使用该服务的两个组件报告了“找不到模块”错误。我可以通过简单地将声明更改为无效文件夹,保存文件然后将其更改回正确的路径来修复它。