TypeScript函数导出导入遇编译错误:Cannot read property未定义
TypeError: Cannot read property 'helloWorld' of undefined - 问题排查与修复
咱们来一步步揪出问题所在哈:
核心问题:导入导出的名称不匹配 + 调用时变量名错误
- 在
utilities/index.ts里,你导出的是toolsFunction(代码是export { toolsFunction }),但在allfunctions.ts里你写了import { taskFunctions as Utility } from './utilities/'——这里的taskFunctions是一个不存在的导出项,导致你拿到的Utility(以及你后续误用的taskFunctions)都是undefined,调用它的helloWorld方法自然会抛出类型错误。 - 另外你调用的时候用了
taskFunctions.helloWorld(),但你明明给导入的项起了别名Utility,这里变量名也完全搞混了。
修复方案(两种可选)
方案一:直接修正导入和调用的变量名
只需要修改allfunctions.ts的代码,让它和utilities/index.ts的导出对应上:
import { toolsFunction as Utility } from './utilities/'; Utility.helloWorld();
方案二:优化导出逻辑(更符合TS常用规范)
如果你想让导入调用更简洁,可以调整utilities/index.ts的导出方式:
// 方式1:直接重新导出tools.ts里的所有内容 export * from './tools';
对应的allfunctions.ts可以这样写(两种调用方式任选):
// 方式A:作为命名空间导入 import * as Utility from './utilities/'; Utility.helloWorld(); // 方式B:直接解构导入需要的函数 import { helloWorld } from './utilities/'; helloWorld();
或者你也可以把utilities/index.ts改成默认导出:
import * as toolsFunction from './tools'; export default toolsFunction;
对应的allfunctions.ts写法:
import Utility from './utilities/'; Utility.helloWorld();
补充说明
你遇到的“编译前运行正常,编译时报错”的情况,大概率是因为开发时用了ts-node这类工具,它对导入导出的检查比较宽松;而正式编译时TypeScript会严格校验模块导出的匹配性,所以暴露了这个问题。
内容的提问来源于stack exchange,提问作者uksz
相关产品推荐
相关产品推荐

