从节点模块导入的类型在编译后变为“任意”

Types imported from node module becomes `any` after compilation

我正在尝试在我的项目 API 中使用另一个包中的一些类型,因为我正在将这些参数传递给提到的包。 这是我正在做的事情:

import type { Column, CellProps } from "react-table";

export const foo = (): Column => {...}

包中的一切工作正常,但是当我使用汇总构建它时,生成的 .d.ts 文件如下所示,并且在任何消费者包中使用时类型变为 any (以及当我将鼠标悬停在 .d.ts 文件中:

import type { Column, CellProps } from "react-table";

export declare const foo: () => Column;

P.S。 我正在使用汇总从代码中删除声明,并使用 tsc --emitDeclarationOnly 生成那些 .d.ts 文件。

P.S.2。 我的依赖项中有 react-table 包,它提供了内置类型(我没有使用任何 @types/* 包)

这不太正确:

I have the react-table package in my dependencies which provides its built-in types (I'm not using any @types/* package)

react-table 包 does not bundle its types, but rather provides them on DefinitelyTyped, via @types/react-table。如果您希望消费者包具有这些类型,您有几个选择。

一个是让@types/react-table成为你项目的依赖:

# in your project
npm install @types/react-table

然后,当消费者安装您的模块时,他们将引入 @types/react-table 作为传递依赖项。这样做的缺点是 JavaScript 您的包的用户将拥有 @types 他们不需要的依赖项。

另一种方法是让消费者包依赖于 react-table 类型:

# in consumer project
npm install -D @types/react-table

这样做的缺点是您的消费者必须自己管理这种依赖关系。

第三个选项是捆绑依赖项。如果 ColumnCellProps 是简单的接口,这是一个不错的选择。您可以像这样内联它们的定义:

// in your project's TS source
export interface Column {
  // ...
}

export interface CellProps {
  // ...
}

export const foo = (): Column => {...}

假设您的声明与 react-table 中的上游声明兼容,TypeScript 的 duck typing 将解决所有问题。