TypeScript类中的ExpressJS

TypeScript类中的ExpressJS,express,typescript,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();

我能找到的所有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
方法会发出参数类型警告


我想使用强输入,以便
私人应用程序:任何
都无法工作。如何解决这个问题,或者有更好的方法吗?

根据最新的express打字,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
它会起作用的

然而,为express安装打字的方法不止一种。如果您不需要与typescript<2.0兼容(2.0几天前发布),您可以

npm install typescript
npm install @types/express
./node_modules/.bin/tsc test.ts
而且它也会起作用。如果查看
expressservestaticcore
的已安装
types metadata.json
,您会注意到它使用了DefinitelyTyped的types-2.0分支:

"sourceRepoURL": "https://www.github.com/DefinitelyTyped/DefinitelyTyped",
"sourceBranch": "types-2.0",
第三种安装方法是

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

这将从DefinitelyTyped的主分支获取它,正如@Aphelion所发现的,DefinitelyTyped包含删除大量
use
重载的命令,从而导致所讨论的错误。

它确实编译正确。然而,出于某种原因,我的工具
WebStorm
给出了此警告,但它的定义来自
expressservestaticcore
。你知道为什么它会喜欢这个而不是普通的定义吗?这可能会导致问题:是的,你是对的!无论我做了什么,可能都使用了DefinitelyTyped的types-2.0分支,它不包含提交。我更新了答案。顺便说一句,我也使用WebStorm,在我看来,它只使用节点模块和打字中安装的任何东西。不幸的是,提交已合并到typings2.0分支。我刚刚用
npm install@types/express
再次检查,它仍然有效。要么它还没有在npm上发布,要么提交并不是真正的问题。