@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 包打补丁,不建议这样搞。