js/ts和java的导入和导出
发布时间:2026/8/18 14:36:42 作者:尧图编辑部 阅读量:1,286

一、 js/ts的导入和导出1、export JS 和 TS 全都支持不是 TS 独有ES6 模块化标准ES Module原生自带import / export普通.js文件一样能用TS 只是在这个基础上加类型导出语法完全通用。2、export 是干什么的作用把当前文件里的变量、函数、类型、接口暴露出去给别的文件 import 导入使用前端工程化每个 ts/js/vue 文件都是独立模块默认内部变量互相隔离不导出外面拿不到。两种最常用导出① 具名导出export function xxx你代码里这种// 当前文件导出这个函数exportfunctionfetchDocuments():PromiseDocumentRead[]{returnapiFetchDocumentRead[](/api/documents)}// 别的文件导入必须加大括号名字要一致import{fetchDocuments}from/api/file可以一次性导出多个exportfunctiona(){}exportfunctionb(){}② 默认导出export defaultconstApi{get,post}exportdefaultApi// 导入不用大括号名字随便起importrequestfrom/api3、拆解你这段代码每一块含义// 导出函数别的组件可以导入调用exportfunctionfetchDocuments():PromiseDocumentRead[]{// apiFetch 是封装好的请求工具// DocumentRead[] 泛型告诉TS这次接口返回数组每一项结构是DocumentReadreturnapiFetchDocumentRead[](/api/documents)}PromiseDocumentRead[]函数返回 Promise成功后拿到DocumentRead 类型的数组export不加的话别的 Vue/ts 文件无法导入这个查询文档的请求方法4、补充关键区别 JS / TS 在 export 上的差异JS 中只能导出变量、函数、类运行时代码TS 额外可以 export 类型相关内容// JS 写这个会报错TS 允许导出接口、类型exportinterfaceDocumentRead{id:number}exporttypeStatus0|1|2打包后 interface、type 会被删掉只保留函数导出的 JS 代码。export是 ES6 模块标准JS、TS 通用用来暴露文件内的内容供其他文件导入复用TS 只是多了可以导出接口、类型的能力。二、 核心对比JS/TS 的 export vs Java 的访问控制 importJava 不是没有“导入导出”能力只是设计逻辑完全不一样JS/TS 模块化逻辑文件为独立模块靠 export 显式暴露每个.ts/.js是独立模块内部所有变量、函数默认私有外部完全访问不到想给别的文件用必须手动写export暴露别的文件用import按需拿取导出内容。// a.tsexportfunctionfn(){}// 导出外部可引入constsecret123// 没export外部拿不到// b.tsimport{fn}from./a.ts特点显式导出不导出外部不可见。Java 的可见性规则包访问修饰符控制没有 export 关键字Java 没有export关键字控制能不能被外部访问靠两套东西1. 包 package 划分代码所有类放在不同包类似前端不同文件夹2. 四个访问修饰符决定对外是否可见public全项目任意包都能访问等价于前端export导出protected同包 子类可见无修饰包私有仅同一个package内可见private仅当前类内部可见等价于前端不写export的私有变量示例Javapackagecom.agent.api;// public 对外暴露其他包可以import使用publicclassDocumentApi{// public方法外部类可调用publicListDocumentReadfetchDocuments(){returnnull;}// private仅本类内部能用外部完全访问不到privateStringgetSecretToken(){return;}}其他包使用时用import导入这个public类importcom.agent.api.DocumentApi;关键三大区别区别1控制粒度不同TS/JS最小粒度是变量、函数、接口可以只导出单个函数文件内其他内容隐藏exportfunctiona(){}functionb(){}// 隐藏Java最小粒度是类。要么整个类public全部对外开放要么整个类私有只能再通过方法的public/private控制内部方法。区别2有无显式export关键字TS必须写export才对外暴露语法上强制声明Java无export靠public修饰符隐式决定是否对外暴露。区别3模块边界不一样TS一个文件 一个独立模块Java一个包多个文件为一组文件是类载体不是天然隔离单元。对应等价关系对照TSexport function xxx≈ Javapublic类里的public方法TS 不export的函数/变量 ≈ Javaprivate方法TSimport {xxx} from ./file≈ Javaimport 包名.类名补充一个新版本Java特性Java9模块moduleJava9 引入module-info.java里面真的有exports关键字专门控制包对外导出和前端export思想接近但日常CRUD开发几乎没人用你写SSM/SpringBoot完全接触不到不用关心。一句话总结普通SpringBoot/SSM开发看不到export关键字靠public/private控制访问TS每个文件天然隔离必须手动export才能给外部导入两者目的一样隔离私有代码、暴露公共复用代码只是语法和设计逻辑不同。