2016-09-23 162 views
1

所有ExpressJS和打字稿的例子我能找到使用ExpressJS在打字稿类

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

根据最新的快递类型,app的类型被称为Application,而不是Express。如果你把它放在一个空目录,并做

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 

它会工作的以下文件test.ts编译就好

import * as express from "express"; 

export class ServerApp { 

    private app: express.Application = express(); 

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

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

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

,并再次它将工作。如果你看一下安装types-metadata.jsonexpress-serve-static-core,您会发现它使用DefinitelyTyped类型-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重载,导致有问题的错误。

+0

它确实编译正确。但是,由于某些原因,我的工具'WebStorm'给出了这个警告,但从'express-serve-static-core'获取了它的定义。任何想法为什么它会比正常的定义更喜欢这个吗? – Aphelion

+0

这可能会导致问题:https://github.com/DefinitelyTyped/DefinitelyTyped/commit/1e92c152ee1b7af9b39f01789de37e2e463fd0de – Aphelion

+1

是的你是对的!无论我做了什么,都可能使用DefinitelyTyped的类型2.0分支,它不包含那个提交。我更新了答案。顺便说一句,我也使用WebStorm,并且它似乎只是使用node_modules和typings中安装的任何东西。 – artem