具象化类型的访问器核心

v0.2.0 2023-10-01 18:51 UTC

This package is auto-updated.

Last update: 2024-09-26 18:15:50 UTC


README

该项目源于 static-type-assertion-code-generator 的组件。以前,BigSwitch 通常与 new SomeTypeStructure() 相关联。现在,您可以插入所需的功能。

HTL\TypeVisitor 允许您通过实现 Visitor<Tt, Tf>` 接口来访问可具象化的类型。有关示例用法,请参阅 TypenameVisitor

调用 TypeVisitor\visit() 开始。

TAlias 类型包含三个字段,用于高级使用

  • "alias"
    • 此语句左侧的 "ExampleName" 名称
    type ExampleName = int;
  • "opaque":
    • 如果别名使用 newtype 而不是纯 type 声明,则为真。
  • "counter":
    • 每次调用您的访问器函数时都会为每个调用生成一个唯一的整数。
    • 此序列从 1 开始,并在每次调用 $visitor->x() 时增加。

对 hhvm 4.102 到 4.108 的用户的警告。

在 hhvm 版本 4.102 和 4.108 之间,hhvm 将 enum class 的类型从 enum 改为 class。这意味着将调用 ->enum() 而不是 ->class()。如果您的访问者需要在所有支持的 hhvm 版本上具有一致的行为,您必须在 function enum(...) 的顶部添加基于反射的检查,并在参数是 enum classclassname 时调用 ->class()

继续构建一些令人惊叹的东西

  • 根据 Hack 类型生成文档。
  • 创建一个“弱”断言/强制转换库。
  • 使用它生成特定类型的模拟数据。

或者查看 static-type-assertion-code-generator 以了解此访问者如何用于与类型测试 as 表达式等价的功能代码生成。

此 API 的稳定性

以下警告是 type-assert README 的一部分

TypeStructure<T>type_structure()ReflectionTypeAlias::getTypeStructures() 是 HHVM 的实验性功能,不受 Facebook 或 HHVM 团队的支持... 我们强烈建议改为使用 TypeAssert\matches() 和 TypeCoerce\match()。

此警告最初由 Fred Emmott 在 2016 年添加:提交

此项目使用 TypeStructure<T>,与 TypeAssert\matches<T>() 的方式相同。如果此 API 被删除,则需要更改 type-assert 和 type-visitor。 不期望在所有这些年后没有通知就删除此 API,但这并不意味着这种情况不会发生。

对您的影响: 此 API 可能会在 HHVM 的未来版本中出现问题。如果可能,仅在构建步骤中使用此 API,而不是在请求中。这允许在需要时用性能较低的填充物替换它。

致未来的版权律师

本访问者所基于的工作于2021年创建。因此,本仓库的许可年份是2021年,而不是2023年,即本仓库发布的时间。

我没有印象认为这700行代码将在版权期限结束时对预期的用途有用。