2017-04-25 2 views
0

Ich versuche, Typen für die Mikrobibliothek und ihre main exported function hinzuzufügen. Ich habe eine LIBDEF, wie dies für sie geschaffen:Hinzufügen eines libdef für ein commonjs-Modul Exportieren einer Funktion

Flow typisierte/micro.js

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

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

Ich versuche, die Hauptfunktion mit diesem Code-Snippet zu verwenden:

src/index.js

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

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

server.listen(5000) 

In diesem Code-Schnipsel, die Variablen server, req und res werden alle als any eingegeben, obwohl die micro-Variable anscheinend einen Typ aus dem libdef aufnimmt. Dies kann in dieser coverage report durch Flow geschaffen gesehen werden. Ich habe verschiedene Möglichkeiten ausprobiert, um die Funktion zu definieren, aber nichts scheint zu funktionieren. Es wurden keine Syntaxfehler gefunden und der libdef scheint gefunden zu werden. Was mache ich falsch?

Antwort

0

Schauen Sie sich dieses Beispiel aus dem flow-typed definitions for lru-cache

Kurz gesagt, sollte dies tun, was Sie wollen:

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

Es ist auch möglich, dass die Art der Einfuhr nicht funktionieren (ich eigentlich nicht versuchen, Ihre Beispiel). Probieren Sie es aus. –

+0

Es scheint, ich habe zwei Probleme. Die erste ist eine falsche Syntax für aufrufbare Objekte. Dies wird durch Ändern von '()' in '$ call' behoben. Ich möchte den Export als Callable Object behalten, weil micro andere Werte darauf ausgibt. Das zweite Problem ist, dass Typimporte nicht funktionieren. Die 'http'-Modultypen sollten eingebaut sein, um fließen zu können, so dass ich nicht herausfinden kann, warum sie nicht funktionieren. Die Expressbindungen importieren den Typ "Server" so. – Hilzu

+0

Leider kenne ich die Antwort auf deine andere Frage nicht. Es kann sich lohnen, es als separate Frage zu veröffentlichen. –

Verwandte Themen