如何在TypeScript中标记动态引用的导出函数为已使用
解决动态引用导出函数的IDE未使用提示问题
场景背景
项目结构如下:
- 存在多个包含导出函数的模块,每个模块目录下的
index.js会被require加载 - 有一个解析函数,可通过
module-name/function-name格式的别名,动态执行require并调用对应函数,代码如下:
export function resolveModuleFunction(moduleName, functionName) { if (moduleName.indexOf('~/modules') === 0) { moduleName = moduleName.replace('~/','../'); } else if (moduleName.indexOf('~modules/') === 0) { moduleName = moduleName.replace('~modules/','../modules/'); } else if (moduleName.indexOf('~/') === 0) { moduleName = moduleName.replace('~/','../'); } return function(...params) { let moduleInstance = require(moduleName); if (moduleInstance.default) { moduleInstance = moduleInstance.default; } return moduleInstance[functionName].apply(moduleInstance, params); }; }
- 其他仓库通过JSON文件,使用上述别名映射页面与对应的异步加载函数
问题
当前逻辑正常运行,但IDE会提示“模块Y的导出函数X未被使用”,而这些函数实际通过跨仓库的别名动态引用。暂时不想重构到TypeScript来注册页面,希望通过JSDoc标记单个导出函数为已被使用,而非仅在文档中罗列。
解决方案
单个函数的JSDoc标记
在导出函数上添加/** @public */标签,明确标记该函数为对外公开的API,IDE会识别到它会被外部(包括动态引用场景)使用,从而消除未使用提示:
/** @public */ export function fetchPageData() { // 异步加载页面数据的逻辑 }
对于默认导出的函数,同样适用:
/** @public */ export default function fetchDefaultPageData() { // 逻辑代码 }
IDE专属补充方案
如果@public标签未生效,JetBrains系列IDE(如WebStorm、IntelliJ IDEA)支持使用单行注释// noinspection JSUnusedGlobalSymbols来忽略单个函数的未使用提示,虽然这不是标准JSDoc关键字,但可以精准解决问题:
// noinspection JSUnusedGlobalSymbols export function fetchPageData() { // 逻辑代码 }
模块级批量标记
如果某个模块内的所有导出函数都是用于动态引用的,可以在模块顶部添加/** @module */标签,标记整个模块为对外暴露的模块,IDE会默认认为模块内所有导出均被外部使用:
/** @module */ export function funcA() {} export function funcB() {}
内容的提问来源于stack exchange,提问作者Kote Isaev
相关产品推荐
相关产品推荐

