@node-rs jieba导入dict时TypeScript报错

TypeScript 类型报错,提示:找不到模块“@node-rs/jieba/dict”或其相应的类型声明。ts(2307)

utils/string.ts​ 代码如下:

import { Jieba } from '@node-rs/jieba';
// 找不到模块“@node-rs/jieba/dict”或其相应的类型声明。ts(2307)
import { dict } from '@node-rs/jieba/dict';

export const jieba = Jieba.withDict(dict);

当前 tsconfig.json​ 配置如下:

{
  "compilerOptions": {
    "target": "ESNext",
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "verbatimModuleSyntax": true,
    "resolveJsonModule": true,
    "strict": true,
    "skipLibCheck": true,
    "types": [
      "node"
    ],
    "jsx": "react-jsx",
    "jsxImportSource": "hono/jsx",
  }
}

原因:tsconfig.json​ 中 moduleResolution​ 设置为了 NodeNext​,该模式下严格遵循 Node.js 规范,子路径导入需显式 exports​ 声明。

@node-rs/jieba​ 包,没有在 package.json​ 中使用 exports​ 导出模块入口。

解决方案 1: 修改 tsconfig.json 的 moduleResolution

{
  "compilerOptions": {
    "module": "ESNext",
    "moduleResolution": "Bundler",
  }
}

解决方案 2: tsconfig.json 显式添加路径映射 + ts-ignore

tsconfig.json

{
  "compilerOptions": {
    "paths": {
      "@node-rs/jieba/dict": [
        "./node_modules/@node-rs/jieba/dict.js"
      ]
    }
  }
}

string.ts

import { Jieba } from '@node-rs/jieba';
// @ts-ignore
import { dict } from '@node-rs/jieba/dict';

export const jieba = Jieba.withDict(dict);

解决方案 3:

给 @node-rs/jieba 包打补丁,不建议这样搞。