Sto cercando di scrivere un pacchetto per il nodo in TypeScript che utilizza librerie di nodi standard, ad esempio fs
, path
, stream
, http
e così via.Come posso richiedere e dichiarare correttamente le tipizzazioni della libreria di nodi in TypeScript?
Quando si tenta di importare le librerie in un file .ts, VS Code contrassegna la riga corrispondente con un errore:
[ts] Cannot find module 'fs'
. Questo accade non importa come provo a importare la libreria:
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'
I (dovrebbe) avere le definizioni corrette installate con typings install --save --ambient node
.
Quando compilo a JavaScript (utilizzando gulp
e gulp-typescript
, non tsc
), il compliation funziona e la evidenziazione della sintassi mostra nessun errore fino digito 1 carattere ancora:
Come posso definire correttamente le librerie di nodi per TypeScript?
io uso Codice VS per l'evidenziazione del codice e il completamento automatico, gulp
& gulp-typescript
per compilare e typings
per le dichiarazioni di libreria dattiloscritto.
struttura della directory del progetto:
├─ 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
mio 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"
]
}
mio typings.json
:
{
"ambientDependencies": {
"node": "registry:dt/node#4.0.0+20160412142033"
}
}
E il mio compito sorso:
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'))
);
});
Nel caso in cui qualcuno abbia riscontrato lo stesso problema, sono grato per qualsiasi intuizione.
Qual è il risultato del comando 'tsc'? – alisabzevari
Se si utilizzano versioni precedenti di VSCode, è necessario eseguire il comando "Reload Typescript Project" in VSCode. – alisabzevari
@alisabzevari Non sto usando 'tsc' per compilare poiché compilo il progetto in' mylibrary.js' e i test (nelle stesse cartelle) in 'mylibrary.tests.js', cosa che non è possibile con' tsc'. Io uso 'gulp-typescript'. –