Javascript 创建使用流类型并公开类型的JS库
我正在写一个将被第三方使用的库。我选择flowtype作为键入系统(由于我所在的组织的特殊原因)。该库公开带注释的React组件 该库使用flowtype进行注释。我还希望能够在具有flowtype的其他代码中使用它。我在库中创建了Javascript 创建使用流类型并公开类型的JS库,javascript,reactjs,types,flowtype,Javascript,Reactjs,Types,Flowtype,我正在写一个将被第三方使用的库。我选择flowtype作为键入系统(由于我所在的组织的特殊原因)。该库公开带注释的React组件 该库使用flowtype进行注释。我还希望能够在具有flowtype的其他代码中使用它。我在库中创建了index.flow.js,并将以下内容放入其中: // @flow import type MyComponent from './components/my-component' export default MyComponent // some othe
index.flow.js
,并将以下内容放入其中:
// @flow
import type MyComponent from './components/my-component'
export default MyComponent
// some other types follow
...
当我尝试在不同的代码库中使用该库时,类型“不起作用”。例如,如果我将无效的prop传递给组件,则类型系统不会抛出任何错误。我的代码库也是使用flowtype输入的
我应该在库的index.flow.js
文件中声明我的React-in组件吗?这看起来很尴尬,因为现在我必须在两个地方维护类型(组件本身和流文件)
我认为默认情况下该流是有效的。由于我的React组件是类型化的,并且库正在公开
index.flow.js
,它会识别出该组件具有特定的道具、状态等类型,但它没有。因此经过一些研究,我得出结论,有两种方法:
1。公开单个定义文件
确保创建的定义文件与您的发行版JS文件名相同。这意味着,如果您的库lib-a
带有捆绑文件lib-a.js
,请将定义文件命名为lib-a.js.flow
。按照流程文档说明如何正确定义模块
使用这种方法,您需要在其中声明整个模块。这意味着如果你有一个类MyComponent
,你需要在这里再次定义它
我不喜欢这种方法,因为所有东西都需要放在一个地方。在源代码中,然后需要从定义文件导入类型,这样就不会重复类型定义。这并不是很好,例如,使用React,您最终从主定义文件导入Props
type,这使得它的可读性降低,而不是将类型串联起来。我想,这种方法对小型库可能很有用
2. 使用源文件。流后缀
使用这种方法,您基本上可以将所有未传输/未绑定的源代码与分发文件一起复制。这些文件将以*.flow
扩展名结尾,这意味着flow将仅在类型分析时提取这些文件。阅读如何让它工作
简言之,你基本上:
flow copy source
作为开发人员依赖项package.json
:
"build:flow": "flow-copy-source -v -i '**/__tests__/**' src lib"
其中,src
是源代码的文件夹,lib
是最终使用的分发文件的文件夹(可能在npm
存储库中)genflow文件
即将被删除,我使用的方法是目前的前进方向