You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将MP3文件导入TypeScript时出现语法错误

问题原因

TypeScript的类型声明仅解决类型检查阶段的报错,让TS编译器认可.mp3模块的存在,但Node.js(包括ts-node)的模块加载机制本身无法解析二进制文件——它会把MP3的二进制内容当作JavaScript代码去解析,自然会抛出「无效语法」的错误。

解决方案

你有两种可行的处理方式:

方式一:自定义模块加载器(保留导入语法)

  1. 修改类型声明文件,明确导出的是文件路径字符串:
declare module "*.mp3" {
  const filePath: string;
  export default filePath;
}
  1. 安装Node.js的文件加载器:
npm install @node-loader/file --save-dev
  1. 使用加载器运行ts-node:
ts-node --loader @node-loader/file check-audio.ts

该加载器会将.mp3文件的导入解析为文件的绝对路径,避免Node.js尝试解析二进制内容。

方式二:直接通过文件系统读取(更简单)

放弃导入语法,改用Node.js的fs和path模块直接读取文件路径或内容:

import fs from 'fs';
import path from 'path';

// 获取文件绝对路径
const soundFilePath = path.resolve(__dirname, './some-sound-file.mp3');
// 如果需要读取文件内容
const soundBuffer = fs.readFileSync(soundFilePath);

这种方式无需额外配置加载器,直接绕开了模块加载的问题,适合Node.js环境下的脚本场景。

补充说明

前端打包工具(如Webpack、Vite)能处理.mp3导入,是因为它们内置了对应的资源加载器,会将资源转为路径或Base64字符串;但Node.js/ts-node没有这个内置能力,必须手动处理二进制模块的加载逻辑。

内容的提问来源于stack exchange,提问作者oliakaoil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 20:05:08