我正在尝试在TypeScript中编写一个使用标准节点库的节点包,例如path
,stream
,http
,[ts] Cannot find module 'fs'
等等。
当我尝试在.ts文件中导入库时,VS Code会在相应的行中标记错误:
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
我(应该)使用gulp
安装了正确的定义。
当我编译为JavaScript(使用gulp-typescript
和tsc
而不是gulp
)时,赞美有效,语法突出显示没有错误直到我再次输入1个字符:
如何正确定义TypeScript的节点库?
我使用VS Code进行代码突出显示和自动完成,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
获取typescript库声明。
项目的目录结构:
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'))
);
});
我的gulp任务:
inline std::unique_ptr<char[]> W2N(const wchar_t *wstr) {
int cw = lstrlenW(wstr);
if(cw == 0) {
auto psz = std::make_unique<char[]>(1);
psz[0] = '\0';
return psz;
}
int cc = WideCharToMultiByte(CP_ACP, 0, wstr, cw, NULL, 0, NULL, NULL);
if(cc == 0)
return nullptr;
auto psz = std::make_unique<char[]>(cc + 1);
cc = WideCharToMultiByte(CP_ACP, 0, wstr, cw, psz, cc, NULL, NULL);
if(cc == 0) {
return nullptr;
}
psz[cc] = '\0';
return psz;
}
如果有人遇到同样的问题,我很感谢任何见解。
答案 0 :(得分:2)
使用'typings install ...'安装类型声明已经过了几个月就已经过时了。新方法是通过npm和@types命名空间直接安装它。要安装节点类型声明,只需使用npm install @types/node --save-dev
。