如何在TypeScript中正确地要求和声明节点库types?

我正在尝试使用标准节点库(例如fspathstreamhttp在TypeScript中为节点编写一个包。

当我尝试在.ts文件中导入库时,VS Code标记相应的行并出现错误:
[ts] Cannot find module 'fs' 。 无论如何尝试导入库,都会发生这种情况:

 import * as fs from 'fs'; // [ts] Cannot find module 'fs' import fs = require('fs'); // [ts] Cannot find module 'fs' const fs = require('fs'); // [ts] Cannot find name 'require' 

在这里输入图像描述

我(应该)有安装正确的定义安装 – typings install --save --ambient node

当我编译为JavaScript(使用gulpgulp-typescript ,而不是tsc )时,编译工作语法高亮显示没有错误,直到我再次键入1个字符:

在这里输入图像描述

如何正确定义TypeScript的节点库?


我使用VS代码来进行代码高亮和自动完成, gulpgulp-typescript typings为打字稿库声明进行编译和typings

该项目的目录结构:

 ├─ build/ │ └─ (output files) ├─ src/ │ └─ myfile.ts ├─ typings/ │ ├─ browser/ │ │ └─ ambient/ │ │ └─ node/ │ │ └─ index.d.ts │ ├─ main/ │ │ └─ ambient/ │ │ └─ node/ │ │ └─ index.d.ts │ ├─ browser.d.ts │ └─ main.d.ts ├─ gulpfile.js ├─ package.json ├─ tsconfig.json └─ typings.json 

我的tsconfig.json

 { "compileOnSave": false, "compilerOptions": { "declaration": true, "module": "system", "moduleResolution": "node", "noEmitOnError": true, "noImplicitAny": true, "target": "es5" }, "exclude": [ "node_modules", "typings/browser", "typings/browser.d.ts" ] } 

我的typings.json

 { "ambientDependencies": { "node": "registry:dt/node#4.0.0+20160412142033" } } 

而我的g咽任务:

 gulp.task('build-typescript', () => { const gulpts = require('gulp-typescript'); const tsProject = gulpts.createProject('tsconfig.json', { typescript: require('typescript'), outFile: 'mylibrary.js', noLib: true }); let tsstream = ( gulp.src([ 'node_modules/typescript/lib/lib.es6.d.ts', 'typings/main.d.ts', 'src/sharpscript.ts']) .pipe(sourcemaps.init()) .pipe(gulpts(tsProject)) ); return require('merge2')( tsstream.dts.pipe(gulp.dest('build')), tsstream.js .pipe(sourcemaps.write('.', { includeContent: true })) .pipe(gulp.dest('build')) ); }); 

如果有人遇到同样的问题,我很感激任何见解。

几个月后,“typings install …”types声明的安装已经过时了。 新的方法是直接通过npm和@types命名空间来安装它。 安装节点types声明只需使用npm install @types/node --save-dev