核心是通过 exports 主动控制可见性而非隐藏变量,只导出稳定契约接口、统一经 api.ts 导出、冻结配置、类型约束、jsdoc 说明,并用 eslint 和 ts 编译器自动拦截越界导出。

限制内部工具类变量的扩散,核心不是“藏起来”,而是通过 exports(或等效导出机制)主动定义谁可以看见、谁不能碰——它是一道逻辑门禁,不是一堵墙。代码整洁度提升的关键,在于让模块边界清晰可读、依赖关系一目了然、维护者一眼就能判断“改这里会不会影响别人”。
只导出契约,不导出实现细节
工具类常含辅助方法、缓存对象、配置常量等,这些若直接导出,极易被外部误用或强依赖。应只暴露经过封装的稳定接口。
- ❌ 避免:
export class DateUtils { static formatDate() { ... } }—— 外部可能 new 实例、篡改静态状态 - ✅ 推荐:
export const formatDate = (date, fmt) => { ... };或export const dateService = { formatDate, parseISO }; - 内部私有变量如
const DEFAULT_LOCALE = 'zh-CN';或let cacheMap = new Map();不声明 export,自然不可见
用顶层 api.ts 做导出统一入口
禁止底层文件(如 ./utils/numberFormatter.js、./core/cacheManager.js)被直接 import。所有对外能力必须经由模块根目录的 api.ts(或 index.ts)中转。
完整的Galileo AI平台 TypeScript/JS SDK 参考,用于评估、观察和保护 GenAI 应用。适用于构建 Node.js 或 TypeScript 项目。
- 在
api.ts中只写:export { formatDate } from './utils/dateFormatter'; - 可加轻量包装:
export const formatMoney = (val) => `¥${formatNumber(val, 2)}`; - 不导出任何
./core/下的类构造器、私有工具函数或未文档化方法
配合类型与冻结强化接口稳定性
导出即承诺。一旦暴露,就该具备语义确定性,防止使用者意外修改或误解行为。
- 对导出的配置对象使用
Object.freeze:export const CONFIG = Object.freeze({ API_TIMEOUT: 5000 }); - 用 TypeScript 精确约束入参和返回值:
export function throttle<t extends function>(fn: T, delay: number): T</t> - 为关键函数添加 JSDoc,说明副作用边界(例如:“此函数不修改原数组,始终返回新数组”)
构建时自动拦截越界导出
人工审查易遗漏,需工具链兜底。导出项应“用得上、看得见、管得住”。
- 启用 ESLint 插件
import/no-unused-modules,自动标记未被任何地方 import 的导出项 - 在
tsconfig.json中开启"noUnusedExports": true,编译时报错冗余 export - CI 阶段运行 AST 分析脚本,检查是否出现
import ... from 'my-utils/core/cacheManager'这类绕过 api.ts 的非法路径










