如何使用带有typescript

时间:2016-05-12 13:00:15

标签: node.js typescript

我在node中编写了一组typescript辅助模块。我很难获得打字稿来解释外部节点模块的类型信息,例如" fs"和"路径"。

重要的是,我想将我的模块分成一堆Typescript文件,每个文件都有一个类/接口。他们的文件布局是这样的:

  • ts/ISomeInterface1.ts
  • ts/ISomeInterface2.ts
  • ts/SomeClass1.ts
  • ts/SomeClass2.ts

一个类实例化一个或多个接口,编写如下:

///<reference path="IFileSystemHelpers.ts" />
var fs = require("fs");
namespace myNmspace {
    export class SomeClass1 implements SomeInterface1 {

        public someIFunction() {
            //do work
        }
    }
}

我使用gulp-typescript为NodeJ安装类型声明。我使用tsconfig.json文件来构建和引用这些外部输入。这是一个片段:

{
    "version": "1.8.9",
    "compilerOptions": {
        "target": "es6",
        "module": "commonjs",
        "moduleResolution": "node",
        "sourceMap": true,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "noImplicitAny": false,
        "removeComments": true,
        "noLib": false,
        "preserveConstEnums": true,
        "declaration": true,
        "suppressImplicitAnyIndexErrors": true,
            "out": "./outputfile.js"
    },
    "filesGlob": [
        "./**/*.ts",
        "!./node_modules/**/*.ts"
    ],
    "files": [
        "./typings/main.d.ts",
        "./ts/ISomeInterface1.ts",
        "./ts/ISomeInterface2.ts",
        "./ts/SomeClass1.ts",
        "./ts/SomeClass2.ts",
        "./ts/exports.ts"
    ]
}

然后在exports.ts文件中导出类:

declare var exports: any;
if (exports) {
    exports.SomeClass1 = myNmspace.SomeClass1;
    exports.SomeClass2 = myNmspace.SomeClass2;
}

然后是我的问题。如何获取&#34; fs&#34;的类型信息?模块?

我可以在node.d.ts已安装typings的{​​{1}}文件中看到以下内容:

declare module "fs" {
    import * as stream from "stream";
    import * as events from "events";
...

}

如何强制使用Typescript将fs文件中的SomeClass1.ts变量解释为强类型?换句话说,我在这里写什么:

var fs : ??? = require("fs");

有人可以帮忙吗?

顺便说一句,我注意到如果我用var关键字替换import,我会得到fs变量的正确类型解释。然而,指向我的接口的术语中断了,我在implements ISomeInterface1下得到了一条波浪线。更改模式以使用imports会破坏我的文件分隔,并且只有在我想创建单文件节点模块时才有效。

1 个答案:

答案 0 :(得分:1)

使用ES6样式导入

 import * as fs from 'fs'
 import * as path from 'path'

这也将导入定义文件中的定义。

语法var x = require('x')不会(但是import x = require('x')会这样做,以增加混淆)