SuperAPI AI 工具集

fsharp-signature-files

通用与其它

查看项目

更新于 10-16 07:14

技能介绍

用途:为 F# 的 .fs 文件编写配套 .fsi 签名文件,作为该文件的对外契约。未写入 .fsi 的值或类型对后续文件及其他程序集均不可见;在 .fsi 中只声明类型名而不写正文(如 type Email)即可隐藏其字段与联合用例,调用方只能通过构造函数创建值。

主要能力:可用 pwsh ./scripts/public-surface.ps1 -Assembly <bin>/<Lib>.dll -OutFile before.txt 记录改动前的公共接口;用 dotnet build <Lib>.fsproj -p:OtherFlags=--allsigs 生成 .fsi 初稿,再手工删除调用方未使用的成员。

使用方式:将 .fsi 放在对应 .fs 之前,例如 <Compile Include="Email.fsi" /><Compile Include="Email.fs" />。仅测试使用的成员可写成 val internal 并配合 InternalsVisibleTo,不要为了测试而公开。需隐藏表示时,把记录或联合正文替换为裸类型名,保留构造函数。

限制与注意:需把类型或值上的特性复制到 .fsi(如 RequireQualifiedAccess、Struct、Literal),不要添加 .fs 中没有的特性;列出每个实现的接口,否则出现 FS0050 警告;XML 文档注释应放在 .fsi;val 的泛型元数与 inline 标记需与 .fs 一致。生成后应构建全部项目、运行测试,并将 FS3888 与 FS0050 警告视为错误修复;再次运行 public-surface.ps1 与 before.txt 对比,不允许新增行。