TypeScript+pnpm 类型问题:如果没有引用 @vueuse/shared",则无法命名 "useOTPInfosStore" 的推断类型?
在文件 /src/stores/otpInfos.ts 的第 7 行,TypeScript 报出以下错误(但是执行 pnpm dev
运行是没有任何问题的):
如果没有引用 ".pnpm/@vueuse+shared@9.13.0_vue@3.3.4/node_modules/@vueuse/shared",则无法命名 "useOTPInfosStore" 的推断类型。这很可能不可移植。需要类型注释。ts(2742)
请问这是什么意思?我需要怎么修改?
我的本地环境:
> node --version
v20.5.0
> pnpm --version
8.6.12
>code --version
1.81.1
6c3e3dba23e8fadc360aed75ce363ba185c49794
x64
npm 包的版本:package.json
更新 1:
回复
1个回答

test
2024-06-28
看了下,这个应该是ts+pnpm的问题,可以看看如下issue
- https://github.com/microsoft/TypeScript/issues/42873
- https://github.com/microsoft/TypeScript/issues/47663
简单来说就是useStorage
返回的类型是RemovableRef
, 而RemovableRef
这个类型是从@vueuse/shared
这个库导入的,不在项目的依赖里面,ts编译的时候从node_modules找不到,就报错了,尝试如下解决方案:
// 手动引入RemovableRef这个类型就行了
import { defineStore } from "pinia";
- import { useStorage } from "@vueuse/core";
+ import { useStorage, type RemovableRef } from "@vueuse/core";
export const useTodoStore = defineStore("todos", () => {
const todo = useStorage<string[]>("todo", []);
return { todo };
});
或者不用pnpm了,看起来这个问题存在有一段时间了
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容