ExpressScript中的ExpressJS

时间:2016-09-23 17:28:27

标签: express typescript

我可以找到所有使用的ExpressJS和TypeScript示例

import * as express from "express";

let app = express();
app.use("/", express.static("/"));

但是,我想使用类方法:

import * as express from "express";

export class ServerApp {

    private app: express.Express = express();

    public configure {
        this.app.use('/', express.static("/");
    }
}

尝试访问私有变量的use方法会产生参数类型警告。

我想使用强类型,因此private app: any无效。我该如何解决这个问题,还是有更好的方法?

1 个答案:

答案 0 :(得分:1)

根据最新的快递类型,app的类型称为Application,而不是Express。以下文件test.ts编译得很好

import * as express from "express";

export class ServerApp {

    private app: express.Application = express();

    public configure() {
        this.app.use('/', express.static("/"));
    }
}

如果你将它放在一个空目录中并执行

npm install typescript
npm install typings
./node_modules/.bin/typings install -G dt~node
./node_modules/.bin/typings install express
./node_modules/.bin/tsc test.ts typings/index.d.ts

它会起作用。

但是,有多种方法可以为快递安装打字。如果你不需要与typescript兼容< 2.0(2.0几天前发布),你可以

npm install typescript
npm install @types/express
./node_modules/.bin/tsc test.ts

并再次起作用。如果您查看types-metadata.json的已安装express-serve-static-core,您会注意到它使用了DefinitelyTyped的type-2.0分支:

"sourceRepoURL": "https://www.github.com/DefinitelyTyped/DefinitelyTyped",
"sourceBranch": "types-2.0",

第三种安装方式是

../node_modules/.bin/typings install -G dt~express

这将从DefinitelyTyped的主分支中获取它,正如@Aphelion发现的那样,它包含problematic commit,它会删除许多use重载,从而导致错误。