我是tRPC和react-query的新手。我一直在努力测试.query(BE)和useQuery(FE),我试图将数据从FE传递到BE。但是,由于 TS 是静态类型,尽管代码正常工作,但我会收到编译错误(如果我更改为 JS,它会顺利运行)。
这是我的 BE
export const appRouter = trpc
.router()
.query("greet", {
input: z
.object({
name: z.string().nullish(),
})
.default({ name: "World" }),
resolve({ input }) {
return {
message: `Hello ${input.name?.toUpperCase()}!`,
};
},
})
我的 FE 正在调用它
const greet = trpc.useQuery(["greet", { name: "Maria" }]);
编译错误位于 { 名称:"玛丽亚" } 部分。
它说"类型'{名称:字符串;}'不能分配给类型'null | undefined'.ts(2322)"。我不知道为什么使用查询类型定义 是这样的。我认为我根本无法传递任何参数(?
请帮忙,我不知道。感谢您阅读并回答我的问题:)
尝试删除 .nullish 部分并在解析后添加":",如下所示:
export const appRouter = trpc
.router()
.query("greet", {
input: z
.object({
name: z.string().,
})
.default({ name: "World" }),
resolve: async ({ input }) => {
return {
message: `Hello ${input.name?.toUpperCase()}!`,
};
},
})
我对 trpc 也很陌生,所以如果这没有帮助,我很抱歉。
我刚刚遇到了类似的问题,并戳了两天。
事实证明,一旦您将strict
设置为true
tsconfig.json
,它就会消失compilerOptions
TypeScript 工具链的脆弱性从未停止让我感到惊讶。
一点更新,我已经通过移动到一个新的存储库解决了这个问题,哈哈。
我认为问题可能是由以下原因引起的
可能性 1:在 "trpc" 中未定义的 createReactQueryHooks,因此您需要指定const trpc = new createReactQueryHooks<AppRouter>();
,其中 AppRouter 是您从 BE 导出的应用路由器类型。不要使用"任何"类型进行const trpc = new createReactQueryHooks();
。
可能性2:你的javascript和typescript包重叠,所以编译器可能会错误地检测到大多数没有指定类型的javascript。
在VSCODE上遇到了这个问题。退出VS代码并重新打开项目解决了这个问题(然后它也正确地显示了任何潜在的问题)。