首页 > 解决方案 > @types/react-table:如何为我的包的用户包含配置的类型?

问题描述

上下文:我们正在开发一个带有 React 和 TypeScript 的 UI 组件库,并react-table用于我们的表格组件。该库作为 npm 包发布并在我们的其他项目中使用。

我已经配置了文件中@types/react-table描述的类型,文件名为react-table-config.d.ts. 此外,我创建了一个新类型CustomColumn。它基于Column定义并扩展其功能以支持嵌套的字符串访问器(以便 TypeScript 可以识别foo.bar给定表数据是否是有效的字符串访问器)。

目标:我想为我们的图书馆用户提供这种改进的 TypeScript 支持。我特别希望他们能够使用CustomColumn.

问题: 当我在另一个项目中安装库包时,我无法访问我为react-table. 它们甚至不包含在包装中。

如果可能的话,我想避免为打字发布单独的包,尽管我认为这种方法会起作用。

到目前为止我所尝试的: 我很惊讶这并没有立即奏效,因为我们成功地扩展了 Emotion-Theme 与扩展类型声明的类似机制。为了使库的用户可以使用自定义主题,我们简单地重命名emotion.d.tsemotion.ts.

我已经对react-table-config.d.ts(=> react-table-config.ts) 进行了同样的尝试,但遇到了很多 TypeScript 错误,因为虽然文档和当前的 TypeScript 礼仪建议使用Record<,>, 在来自 distinctlyTyped 的实际类型定义中,但它们在其泛型中使用对象。

在解决了产生的类型冲突之后,react-table-config.d.ts现在由转译器生成并包含在包中,但是当我在其他项目中使用它们时,我的自定义类型仍然没有被使用。

到目前为止我尝试过的其他事情:

我真的很想了解为什么这不起作用,尤其是因为 Emotion 的 Theme overwrite 正在起作用。我可以指出的不同之处在于,Emotion 立即支持 TypeScript,因此这些类型没有单独的包。

如果有任何特定的代码会有所帮助,我会尝试提供它(如果可能的话) - 但由于这更像是一个系统性问题,我不想不加选择地发布代码。

标签: typescriptnpmreact-tabledefinitelytyped

解决方案


推荐阅读