2017-04-25 43 views
0

我试图为微库和它的main exported function添加类型。我创建了这样一个libdef吧:为导出函数的commonjs模块添加libdef

流类型/ micro.js

// @flow 
import type { Server, IncomingMessage, ServerResponse } from "http" 

declare module "micro" { 
    declare module.exports: { 
    (): (fn: (req: IncomingMessage, res: ServerResponse) => void) => Server, 
    } 
} 

我试图使用的主要功能与此代码片段:

SRC/index.js

// @flow 
const micro = require("micro") 

const server = micro((req, res) => { 
    res.end("Hello world!") 
}) 

server.listen(5000) 

在该代码片断中的变量serverreqres都被输入为any,即使micro变量似乎从libdef中选取某种类型。这可以在流创建的coverage report中看到。我尝试了几种不同的方式来定义函数,但似乎没有任何工作。没有发现语法错误,并且似乎找到了libdef。我究竟做错了什么?

回答

0

退房从flow-typed definitions for lru-cache

总之这个例子中,这应该做你想做的:

declare module 'micro' { 
    declare var exports: (fn: (req: IncomingMessage, res: ServerResponse) => void) => Server; 
} 
+0

这也有可能是类型进口不工作(我并没有想你的例)。尽管如此。 –

+0

看来我有两个问题。第一种是可调用对象的错误语法。这通过将'()'更改为'$ call'来解决。我想保留导出为可调用对象,因为微导出其他值。第二个问题是类型导入不起作用。 'http'模块类型应该内置于流程中,所以我不知道为什么它们不起作用。表达式绑定像那样导入'Server'类型。 – Hilzu

+0

不幸的是,我不知道你的其他问题的答案。可能值得将它作为单独的问题发布。 –