发布 TypeScript 包时如何处理可选的对等依赖项?

2024-01-06

将 TypeScript 包发布到 npm 并提供接受来自一个对等依赖项或另一个对等依赖项的输入的函数时,如何定义可选的对等依赖项?

import { ExternalFoo } from 'foo';
import { ExternalBar } from 'bar';

export const customPackage = (source: ExternalFoo | ExternalBar) => {
    /* ... */
}

当两个选项之一缺失时,如何防止使用我的包的人出现错误?


从 Typescript 3.8 开始,您可以使用以下语法:

import type { ExternalFoo } from "foo";

因此,如果您只是使用该库来获取类型信息,则可能不必将其列为dependency or optionalDependency不再了。您可能更愿意将其保留为peerDependency这样,如果您的用户有这些依赖项,他们将使用与您的库兼容的版本。自然地,添加为devDependency也很有用。

导入将存在于生成的d.ts仅文件,但不.js转译的代码。但有一个问题是,如果用户没有安装该库,该类型就会变成any这可能会让你自己的打字有点混乱。例如,如果foo没有安装你的功能变成

customPackage = (source: any | ExternalBar) =>
// equivalent to customPackage = (source: any) =>

对于这个特定的类型注释,它很糟糕,因为即使我有bar安装后,它不会用于该类型检查。所以有is一种方式不依赖不再在那个图书馆了,但这并不能解决问题编写类型注释,即使该类型不存在,也不会崩溃.

编辑:请看一下这个答案 https://stackoverflow.com/a/70096366关于如何处理缺失类型。

参考 https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html#type-only-imports-and-export

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

发布 TypeScript 包时如何处理可选的对等依赖项? 的相关文章

随机推荐

  • Excel VBA 自动筛选数组

    我正在使用 Microsoft Excel 的 VBA 中的自动筛选器 我对它如何处理过滤数组有疑问 我已经将原来的上下文淡化为简化版本 最初是为了理解这个问题 在范围 A1 A5 的工作表中 假设我们有Fruit Apple Banana
  • Android WebView 在用户交互之前无法完全渲染内容

    我有一个扩展 WebView 的自定义类 用于显示 HTML 内容 当用户单击 HTML 文档中的链接时 我计算要滚动到的 X 值 然后使用scrollTo x y 通过可运行对象显示该位置 见下文 post new Runnable Ov
  • 一个关于比较List的问题

    我有两个清单 List
  • RabbitMQ - 通道关闭:连接错误(SpringXD 重复关闭rabbitmq 连接。)

    我度过了一个糟糕的夜晚 试图弄清楚 RabbitMQ 和 SpringXD 到底发生了什么 不幸的是没有成功 问题 SpringXD反复关闭RabbitMQ连接 或报告与通道缓存大小相关的警告 SpringXD 日志的片段 在流初始化 自动
  • 猫鼬自定义模式类型

    我从 mongoose 文档中了解到 可以创建自定义模式类型并将其添加到已有的模式类型中 正如所建议的 我尝试研究猫鼬长的例子 https github com aeckmann mongoose long https github com
  • 退格键在 Eclipse Mars 中恢复

    我在 Eclipse Mars 4 5 0 中的退格键的作用类似于删除键 它删除右侧字符而不是左侧字符 这真的很令人困惑 也许我不小心使用了快捷键 我尝试重新启动 Eclipse 但没有成功 我还尝试将键绑定首选项切换为 Emacs 方案
  • 检查页面是父页面还是子页面?

    是否可以检查页面是父页面还是子页面 我的页面设置如下 家长 子页1 子页2 etc 如果它是父页面 我想显示某个菜单 如果它在子页面上 我想显示不同的菜单 我知道我可以做类似下面的事情 但我想让它更加动态 而不包含特定的页面 ID 您可以测
  • “kotlin-noarg”插件在 Realm 中不起作用

    kotlin allopen 插件可以工作 但 kotlin noarg 插件不起作用 我能怎么做 下面是代码 构建 gradle buildscript ext kotlin version 1 1 3 2 repositories go
  • cin 首次使用函数后不允许输入

    对于 C 或任何类型的编程来说都是全新的 我正在尝试进行简单的输入 输出 但是在回答第一个问题后 我没有机会输入第二个输入 我尝试过在网上查找内容 但考虑到这是一个非常简单的代码 据说哈哈 没有人遇到过同样的问题 这让我来到这里 inclu
  • 生产中的高超音速休眠?

    开发商高超音速 http hsqldb org 承诺提高绩效 但我担心使用 hsqlDB 的管理和其他方面会出现问题 有人在生产中使用这个吗 这是个好主意吗 许多公司 http hsqldb org web hsqlUsing html在生
  • 如何评估 WHERE 子句中的输入

    我正在我的一个变量中输入一个输入 基本上我想做一些类似的事情 SELECT FROM PEOPLE WHERE IF INPUT 1 ITEMID 16 OR ITEMID 13 ELSE IF INPUT 2 ITEMID 11 OR I
  • Java SFTP (apache vfs2) - 密码带有@

    我正在尝试使用 org apache commons vfs2 通过 SFTP 下载文件 问题是 密码包含 字符 因此这会导致 URI 被错误解析 org apache commons vfs2 FileSystemException Ex
  • 有没有办法只限制mysql中的较低范围?

    我想获取查询中除第一行之外的所有行 我怎样才能做到这一点 您可以使用大量行 偏移量为1 LIMIT 1 18446744073709551615
  • 为什么 JSON 列不能是唯一键?

    我有一个表 里面有一个名为ColumnName该列的数据类型是JSON 我正在努力让它成为unique key 但这是不可能的 我收到了这条消息 3152 JSON 列 columnName 不能在键规范中使用 我想了解为什么我不能将该列设
  • 在 SQL Server 中从 base64 字符串转换为 varbinary(max)

    我的表中以二进制形式存储了 PDF 文档 存储 PDF 字节的列是 typevarbinary max 我想要updateSQL Studio 中包含更新文档的一条记录 我尝试完成此操作的方式如下所示 UPDATE table SET fi
  • Azure 搜索是否支持拼写错误和同义词?

    我见过讨论这两个主题的线程 Azure 搜索是否处理同义词 https stackoverflow com questions 31180405 does azure search handle synonyms 搜索 API 中的模糊搜索
  • 没有简单组件的提供者

    直到 5 分钟前它才工作 这毫无意义 这是组件 import Component OnInit from angular core import Osobaa from osobaa import Osoba from osoba impo
  • RUBYLIB 环境路径

    所以目前我已将以下内容包含在我的 bashrc 文件中 export RUBYLIB home git project app helpers 我正在尝试使用具有以下规范的规范来运行 rspec require output helper
  • 在Python中读取csv文件时列出索引超出范围错误

    我有这段代码 我正在读取 csv 文件 使用NamedTemporaryFile更改 csv 文件的内容 def update localcsv ping Yes No filename file1 csv tempfile NamedTe
  • 发布 TypeScript 包时如何处理可选的对等依赖项?

    将 TypeScript 包发布到 npm 并提供接受来自一个对等依赖项或另一个对等依赖项的输入的函数时 如何定义可选的对等依赖项 import ExternalFoo from foo import ExternalBar from ba