首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成具有第三方类型依赖关系的可分发流类型包。

生成具有第三方类型依赖关系的可分发流类型包。
EN

Stack Overflow用户
提问于 2018-09-13 16:52:53
回答 1查看 270关注 0票数 0

我有一个使用流类型的库。它还有一个依赖项,其接口的一部分包括来自该库的flow-typed文件的类型定义。我使用flow-copy-source来确保已安装的包中有.js.flow文件。

我遇到的问题是,当这个库的使用者导入我的模块时,从依赖项导入的类型也会被导入,但是使用者现在必须为该依赖项安装自己的flow-typed定义副本。通常情况下,这是很好的,但是如果消费代码有不同版本的依赖本身,就没有办法避免相互冲突的定义。

具体来说,我的库是一个使用axios@0.18.x的HTTP服务包装器,具有如下所示的导入:

代码语言:javascript
复制
import type { Axios, AxiosXHRConfig } from 'axios';

AxiosXHRConfigflow-typed定义的版本0.18.x中接受两个类型参数。同时,消费应用程序正在使用较早版本的axios,并为该旧版本提供了axios库定义的不同版本。由于这两个库定义都有:

代码语言:javascript
复制
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定义之外,如何使具有全局类型依赖关系的可分发流类型包安全地被其他流项目使用?

EN

回答 1

Stack Overflow用户

发布于 2018-09-13 18:38:26

在我听说有一种更自动的方法之前,我会把这个方法当作一种手动解决方案:

  1. 为我的库创建一个仅包含公共接口的/src/interface.js流文件
  2. 让我的客户类实现这个公共接口
  3. 停止使用flow-copy-source
  4. 同时发布我的/src和转置的/lib目录。
  5. 添加一个index.jsindex.js.flow来清除接口实现的输入,如下所示:

index.js:

代码语言:javascript
复制
module.exports = require('./lib/client').default;

index.js.flow:

代码语言:javascript
复制
// @flow

import type { FooClient as _FooClient } from './src/interface';
export type FooClient = _FooClient;

const Client: Class<FooClient> = require('./lib/client').default;

export default Client;

这解决了最初的问题,因为第三方依赖关系现在已经被有效地封装,并且没有到达公开的接口之外。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52318374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档