【问题标题】:Flow libdefs for libraries with deeper paths具有更深路径的库的流 libdefs
【发布时间】:2018-12-23 18:08:14
【问题描述】:

我正在测试 Flow 以输入我们的 JavaScript,并且我想为内部库创建一个 libdef。它是这样导入的:

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

The documentation 并没有真正解决如何为像这样的深层路径创建库定义 - 只有顶级路径。

我应该把 libdef 文件放在哪里?我怎么称呼它?它看起来如何(当然忽略 libdef 的实际实现)?

提前感谢您对此提供的任何帮助!

【问题讨论】:

    标签: javascript flowtype flow-typed


    【解决方案1】:

    您可以在一个 libdef 中拥有多个 declare module。您可以使用深层路径作为模块名称。只要此 libdef 文件包含在您的.flowconfig[libs] 部分中,它的位置并不重要。

    这是一个示例,其中internally-shared-libs 具有导出以及具有导出的更深路径:

    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;
    }
    

    用法:

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

    【讨论】:

    • 完美答案!尽管需要注意的是,在这种情况下,命名空间以及命名通常完全取决于您。虽然使用与实际路径匹配的名称来声明模块可能是个好主意,但您不必必须 使用任何其他您认为合适的名称。如果导出中的不同名称之间没有冲突,例如,您可以将声明命名为与导出的模块相同。
    • 非常感谢 - 确实是很好的答案!
    猜你喜欢
    • 2020-05-18
    • 2020-02-21
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    相关资源
    最近更新 更多