2016-04-23 93 views
6

我試圖在使用標準節點庫的TypeScript中爲節點編寫一個包,例如fspath,stream,http等等。如何在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' 

enter image description here

我(應該)與typings install --save --ambient node安裝了正確的定義。

當我編譯成JavaScript(使用gulpgulp-typescript,不tsc),該compliation 工作語法高亮顯示沒有錯誤,直到我在1個字再次鍵入:

enter image description here

如何正確定義TypeScript的節點庫?


我使用VS代碼代碼高亮和自動完成,gulp & gulp-typescript編譯和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" 
    } 
} 

而且我一飲而盡任務:

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')) 
    ); 
}); 

如果有人遇到同樣的問題,我很感激任何見解。

+0

'tsc'命令的結果是什麼? – alisabzevari

+0

如果您使用的是VSCode的舊版本,則必須在VSCode中運行「Reload Typescript Project」命令。 – alisabzevari

+0

@alisabzevari由於我編譯項目到'mylibrary.js'和測試(在相同的文件夾中)到'mylibrary.tests.js',這是'tsc'不可能的,所以我不使用'tsc'編譯。我使用'gulp-typescript'。 –

回答

1

安裝類型聲明'typings install ...'已經過時幾個月了。新的方法是直接通過npm和@types命名空間來安裝它。安裝節點類型聲明只需使用npm install @types/node --save-dev

相關問題