Kris Selbekk
Kris Selbekk

Reputation: 7654

Flow libdefs for libraries with deeper paths

I'm testing out Flow for typing our JavaScript, and I want to create a libdef for an internal library. It's imported like this:

import withValidation from 'internally-shared-libs/decorators/withValidation';

The documentation doesn't really address how to create library definitions for deep paths like this - only top level ones.

Where do I put the libdef file? What do I call it? And how would it look (ignoring the actual implementation of the libdef, of course)?

Thanks in advance for any help on this!

Upvotes: 1

Views: 182

Answers (1)

Saad
Saad

Reputation: 53969

You can have multiple declare module in a single libdef. You can use a deep path as the module name. It doesn't matter where this libdef file is as long as it is included in the [libs] section in your .flowconfig.

Here's an example where internally-shared-libs has exports as well as deeper paths having exports:

Libdef:

// @flow

declare module 'internally-shared-libs' {
  declare export function hello(): string;
  declare export function bye(): string;
}

declare module 'internally-shared-libs/decorators/withValidation' {
  // You will obviously want to improve these types
  declare type Input = any;
  declare type Output = any;
  declare export default function withValidation(input: Input): Output;
}

Usage:

// @flow

import { hello, bye } from 'internally-shared-libs';
import withValidation from 'internally-shared-libs/decorators/withValidation';

Upvotes: 2

Related Questions