javascript原生不支持导出typescript类型,export interface/type仅在ts编译期生效、运行时被擦除;可导出interface、type alias、class(自动附带类型)、值推导类型等,但js文件中不可用,需依赖jsdoc模拟。

JavaScript 本身是动态类型语言,原生不支持导出 TypeScript 类型声明或接口(interface)——因为 type、interface、type alias 等属于 TypeScript 编译期语法,在运行时会被完全擦除。但实际开发中,我们常在 TS 项目里用 export 暴露类型供其他模块使用,关键在于:这些导出只对 TypeScript 编译器生效,不影响 JS 运行。
导出 interface 和 type 的写法(TS 专用)
只要文件是 .ts 或启用了 TS 支持的 .tsx,就可以像导出值一样导出类型:
- 直接在声明前加
export:export interface User { id: number; name: string; } - 先定义再批量导出:
interface Config { timeout: number; }<br>type Status = 'idle' | 'loading' | 'success';<br>export { Config, Status }; - 导出时重命名:
export { Config as AppConfig, Status as RequestStatus };
导出 class 时自动附带类型信息
导出一个 class,不仅导出了可运行的构造函数,也同时导出了它的实例类型和静态类型:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
export class ApiClient { ... }→ 导入后可直接用const client: ApiClient = new ApiClient(); - TypeScript 会自动把类名识别为类型,无需额外
export type { ApiClient } - 如果只想暴露类型(不导出实现),可用
export type { ApiClient } from './api';(需配合export class ApiClient存在)
导出 type alias 与条件类型
普通类型别名、联合类型、泛型类型等均可导出,且支持嵌套和推导:
export type UserId = string & { __brand: 'UserId' };export type ApiResponse<t> = { data: T; success: boolean };</t>- 导出从值推导的类型:
const DEFAULT_OPTS = { retry: 3, timeout: 5000 } as const;<br>export type DefaultOptions = typeof DEFAULT_OPTS;
注意:JS 环境下这些 export 不产生运行时代码
TS 编译器默认会移除所有类型相关语句。生成的 JS 文件中,export interface 或 export type 完全不会出现——它们只参与类型检查。因此:
- 不能在纯 JS 文件(
.js)中写export interface,会报语法错误 - 若需在 JS 项目中“模拟类型导出”,只能靠 JSDoc(如
/** @typedef {Object} User */),但不具等价性 - 打包工具(如 Vite、Webpack)配合 TS 插件时,类型导出不影响产物体积或执行逻辑
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










