Popper.js Typings
Popper 带有 Flow 和 TypeScript 的类型定义。
该项目由 Flow 进行类型检查,TypeScript 的类型定义是从其源代码自动生成的。
请注意,类型定义并不严格遵循 SemVer,因为任何类型更改都可能是破坏性更改,但类型系统发展非常迅速,并且需要不断进行调整以跟上它们。
Common (Flow and TypeScript)
本节涵盖适用于 Flow 和 TypeScript 的常识,为了简单起见,示例是用 Flow 编写的,但在删除 // @flow
标头后,它们应该按原样工作。
修饰符类型检查
默认情况下,createPopper
在松散类型模式下工作,这意味着修饰符没有经过严格的类型检查。
如果您想选择加入严格模式,您可以执行以下操作:
// @flow
import { createPopper } from '@popperjs/core';
import type { StrictModifiers } from '@popperjs/core';
createPopper<StrictModifiers>(referenceElement, popperElement, options);
如果您想定义自定义修饰符,则需要将它们添加到列表中:
// @flow
import { createPopper } from '@popperjs/core';
import type { StrictModifiers, Modifier } from '@popperjs/core';
type CustomModifier = Modifier<'custom', { customOption: boolean }>;
type ExtendedModifiers = StrictModifiers | $Shape<CustomModifier>;
createPopper<ExtendedModifiers>(referenceElement, popperElement, options);
Flow
我们不是导出有限的类型定义,而是从dist/umd
文件夹链接到 Flow-typed
源文件。
Flow
将自动读取公开的类型,因此您无需更改项目中的任何配置即可从 Popper 类型中受益。
你也可以决定从库中导入一个特定的模块,通过这样做,模块类型将被自动导入:
import hideModifier from '@popperjs/core/lib/modifiers/hide';
尽管建议将以下行添加到您的.flowconfig
文件中,以指示 Flow 不要报告源自您的node_modules
文件夹的类型错误。 模块公开的类型定义仍将被使用,但它们的错误(如果有)将被忽略。
[declarations]
<PROJECT_ROOT>/node_modules
***
TypeScript
从 Flow 生成 TypeScript 类型定义可以使用更严格的规则对项目进行类型检查,同时为其他类型系统的用户提供类型定义。
两种类型系统的类型定义接口本质上是相同的,但由于 Flow 和 TypeScript 之间的内在差异,我们不能保证 TypeScript 定义的类型覆盖范围相同。
TypeScript .d.ts 文件与对应的 JavaScript 模块一起位于 lib/ 文件夹中,位于存储库根目录的 index.d.ts 文件允许 TypeScript 编译器定位它们,无需额外配置即可使用 typings。
你也可以决定从库中导入一个特定的模块,通过这样做,模块类型将被自动导入:
import hideModifier from '@popperjs/core/lib/modifiers/hide';