我試圖在使用標準節點庫的TypeScript中爲節點編寫一個包,例如fs
,path
,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'
我(應該)與typings install --save --ambient node
安裝了正確的定義。
當我編譯成JavaScript(使用gulp
和gulp-typescript
,不tsc
),該compliation 工作和語法高亮顯示沒有錯誤,直到我在1個字再次鍵入:
如何正確定義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'))
);
});
如果有人遇到同樣的問題,我很感激任何見解。
'tsc'命令的結果是什麼? – alisabzevari
如果您使用的是VSCode的舊版本,則必須在VSCode中運行「Reload Typescript Project」命令。 – alisabzevari
@alisabzevari由於我編譯項目到'mylibrary.js'和測試(在相同的文件夾中)到'mylibrary.tests.js',這是'tsc'不可能的,所以我不使用'tsc'編譯。我使用'gulp-typescript'。 –