我有一个使用流类型的库。它还有一个依赖项,其接口的一部分包括来自该库的flow-typed文件的类型定义。我使用flow-copy-source来确保已安装的包中有.js.flow文件。
我遇到的问题是,当这个库的使用者导入我的模块时,从依赖项导入的类型也会被导入,但是使用者现在必须为该依赖项安装自己的flow-typed定义副本。通常情况下,这是很好的,但是如果消费代码有不同版本的依赖本身,就没有办法避免相互冲突的定义。
具体来说,我的库是一个使用axios@0.18.x的HTTP服务包装器,具有如下所示的导入:
import type { Axios, AxiosXHRConfig } from 'axios';AxiosXHRConfig在flow-typed定义的版本0.18.x中接受两个类型参数。同时,消费应用程序正在使用较早版本的axios,并为该旧版本提供了axios库定义的不同版本。由于这两个库定义都有:
declare module "axios" {
// ...
}库中的...that import type { ... } from 'axios'无法解析到库中的flow-typed/npm/axios_v0.18.x.js,而不是消费应用程序的flow-typed/npm/axios_v0.17.x.js。
除了复制库中的flow-typed定义之外,如何使具有全局类型依赖关系的可分发流类型包安全地被其他流项目使用?
发布于 2018-09-13 18:38:26
在我听说有一种更自动的方法之前,我会把这个方法当作一种手动解决方案:
/src/interface.js流文件flow-copy-source/src和转置的/lib目录。index.js和index.js.flow来清除接口实现的输入,如下所示:index.js:
module.exports = require('./lib/client').default;index.js.flow:
// @flow
import type { FooClient as _FooClient } from './src/interface';
export type FooClient = _FooClient;
const Client: Class<FooClient> = require('./lib/client').default;
export default Client;这解决了最初的问题,因为第三方依赖关系现在已经被有效地封装,并且没有到达公开的接口之外。
https://stackoverflow.com/questions/52318374
复制相似问题