ts-node

问题描述

前置条件:已经安装了 ts 依赖和 ts-node 依赖。

# typescript 安装与验证
npm i -g typescript
tsc -v

# ts-node 安装与验证
npm i -g ts-node
ts-node -v

问题报错:新建了 hello.ts 文件,通过 ts-node hello.ts 执行 ts 文件时报错,具体报错信息如下:

TypeError: Unknown file extension ".ts" for D:\xxx\test\typescript\hello.ts

at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:160:9)

at defaultGetFormat (node:internal/modules/esm/get_format:203:36)

at defaultLoad (node:internal/modules/esm/load:141:22)

at async ModuleLoader.load (node:internal/modules/esm/loader:409:7)

at async ModuleLoader.moduleProvider (node:internal/modules/esm/loader:291:45)

at async link (node:internal/modules/esm/module_job:76:21) {

code: 'ERR_UNKNOWN_FILE_EXTENSION'

}

从报错信息中我们看到,TypeError: Unknown file extension ".ts",指出 Node.js 尝试以本地 ESM (ECMAScript Modules) 方式直接执行 .ts 文件时遇到了问题。Node.js 本身并不原生支持 .ts 文件的直接执行,因此当你尝试直接使用 Node.js 运行 TypeScript 文件时会发生这个错误。

解决方案

查看 package.json 文件后发现配置了 "type": "module" 选项,将其删除后再执行 ts-node hello.ts 后不再报错~