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

时间:2016-04-23 12:00:22

标签: node.js typescript visual-studio-code definitelytyped

我正在尝试在TypeScript中编写一个使用标准节点库的节点包,例如pathstreamhttp[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

enter image description here

我(应该)使用gulp安装了正确的定义。

当我编译为JavaScript(使用gulp-typescripttsc而不是gulp)时,赞美有效语法突出显示没有错误直到我再次输入1个字符:

enter image description here

如何正确定义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;
}

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

1 个答案:

答案 0 :(得分:2)

使用'typings install ...'安装类型声明已经过了几个月就已经过时了。新方法是通过npm和@types命名空间直接安装它。要安装节点类型声明,只需使用npm install @types/node --save-dev