2017-04-25 1 views
0

J'essaie d'ajouter des types pour la micro-bibliothèque et ses main exported function. J'ai créé un BIBDEF comme celui-ci pour lui:Ajout d'une libdef pour un module commonjs exportant une fonction

flux typé/micro.js

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

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

Je suis en train d'utiliser la fonction principale avec ce bout de code:

src/index.js

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

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

server.listen(5000) 

Dans ce code snippet les variables server, req et res sont tous typés any même si la variable micro semble prendre un certain type de la libdef. Cela peut être vu dans ce coverage report créé par flux. J'ai essayé plusieurs façons de définir la fonction, mais rien ne semble fonctionner. Aucune erreur de syntaxe n'est trouvée et la libdef semble être trouvée. Qu'est-ce que je fais mal?

Répondre

0

Découvrez cet exemple de la flow-typed definitions for lru-cache

En bref, cela devrait faire ce que vous voulez:

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

Il est également possible que les importations de type ne fonctionnent pas (je ne l'ai pas vraiment essayer votre Exemple). Essayez ceci cependant. –

+0

Il semble que j'ai deux problèmes. La première est une syntaxe incorrecte pour les objets appelables. C'est corrigé en changeant '()' en $ call. Je veux garder l'exportation comme un objet appelable parce que le micro exporte d'autres valeurs dessus. Le deuxième problème est que les importations de type ne fonctionnent pas. Les types de modules 'http' devraient être intégrés pour que je ne puisse pas comprendre pourquoi ils ne fonctionnent pas. Les liaisons express importent le type 'Server' comme ça. – Hilzu

+0

Malheureusement, je ne connais pas la réponse à votre autre question. Cela peut valoir la peine de l'afficher comme une question distincte. –