从节点模块导入的类型在编译后变为“任意”
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
这样做的缺点是您的消费者必须自己管理这种依赖关系。
第三个选项是捆绑依赖项。如果 Column
和 CellProps
是简单的接口,这是一个不错的选择。您可以像这样内联它们的定义:
// in your project's TS source
export interface Column {
// ...
}
export interface CellProps {
// ...
}
export const foo = (): Column => {...}
假设您的声明与 react-table
中的上游声明兼容,TypeScript 的 duck typing 将解决所有问题。
我正在尝试在我的项目 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
这样做的缺点是您的消费者必须自己管理这种依赖关系。
第三个选项是捆绑依赖项。如果 Column
和 CellProps
是简单的接口,这是一个不错的选择。您可以像这样内联它们的定义:
// in your project's TS source
export interface Column {
// ...
}
export interface CellProps {
// ...
}
export const foo = (): Column => {...}
假设您的声明与 react-table
中的上游声明兼容,TypeScript 的 duck typing 将解决所有问题。