TypeScript默认导出接口问题:模块导入报错及二次导出需求
TypeScript类型导出与导入问题解决方案
1. 调整types.d.ts的导出方式
如果要默认导出单个接口,直接在接口声明前添加export default:
export default interface Messenger { send: (msg: string) => void; receive: () => string; }
如果要默认导出多个类型,可将所有类型整合后统一导出:
// 先定义所有需要导出的类型 interface Messenger { send: (msg: string) => void; receive: () => string; } interface Message { content: string; timestamp: number; } // 打包为一个类型集合后默认导出 type AllTypes = { Messenger: Messenger; Message: Message; }; export default AllTypes;
2. 在index.ts中完成二次导出
直接导入types.d.ts的默认导出内容,再重新导出即可:
// 导入types模块的默认导出内容 import Types from './types'; // 二次默认导出 export default Types; // 也可按需重命名导出(可选) export { default as AppTypes } from './types';
3. 解决"Cannot find module './types'"错误
- 检查文件路径:确认
index.ts与types.d.ts在同一目录下,路径./types拼写正确,注意系统是否区分文件名大小写。 - 配置tsconfig.json:确保
include字段包含当前目录的文件,同时设置正确的模块解析方式:{ "compilerOptions": { "moduleResolution": "node" }, "include": ["src/**/*"] // 若文件在src目录下,根目录文件则改为["*"] } - 确保
types.d.ts被识别为模块:只要文件中存在export语句,TypeScript就会将其标记为模块文件(而非全局类型文件),这是成功导入的必要条件。
验证导入效果
在其他业务文件中导入使用:
// 从index.ts导入二次导出的类型 import AppTypes from './index'; const messenger: AppTypes.Messenger = { send: (msg) => console.log(`发送消息:${msg}`), receive: () => '收到回复' }; // 或直接从types.d.ts导入默认导出的类型 import Messenger from './types'; const messenger2: Messenger = { send: (msg) => console.log(msg), receive: () => 'Hello' };
内容的提问来源于stack exchange,提问作者Nawapat Buakoet
相关产品推荐
相关产品推荐

