Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I declare a module's root export in a Flow interface declaration?

Tags:

flowtype

In a Flowtype interface declaration file, how do I declare a module's module.exports?

Say, for example, I am using Express:

import express from 'express';
const app = express();
like image 283
Dmitry Minkovsky Avatar asked Dec 01 '25 03:12

Dmitry Minkovsky


1 Answers

The current syntax for this is

declare module express {
    declare type Express { ...#use(), #post(), #get(), etc... }
    declare var exports: () => Express
}

You can also use declare function exports(): Express, or use any other type you want, for example:

declare module moduleThatExportsNumber {
    declare var exports: number
}

In the future this Common JS-based syntax may be replaced by something that reflects the semantics of ES6 modules.

In .js.flow files inside your own library, you can do:

declare function createExpress(): Express;
declare module.exports: typeof createExpress;
like image 192
Dmitry Minkovsky Avatar answered Dec 06 '25 08:12

Dmitry Minkovsky