如何为TanStack React Table的ColumnDef指定Prisma findMany数据类型?
解决TanStack React Table结合Prisma的类型定义问题
直接用Prisma自动生成的User类型就能解决,具体操作如下:
- 导入Prisma生成的User类型
Prisma会根据你的schema自动生成类型定义,直接从@prisma/client里导入即可:
import type { User } from '@prisma/client';
- 在ColumnDef和函数参数中使用该类型
在抽离的列定义文件里,把WHAT_HERE替换成User:
import { ColumnDef } from '@tanstack/react-table'; import type { User } from '@prisma/client'; // 列数组类型定义为ColumnDef<User>[] export const userColumns: ColumnDef<User>[] = [ { accessorKey: 'id', header: 'ID', // 参数row.original的类型自动推导为User cell: ({ row }) => <span>{row.original.id}</span>, }, { accessorKey: 'name', header: '姓名', cell: ({ row }) => <span>{row.original.name}</span>, }, // 其他列定义... ];
- 在页面组件中使用抽离的列
直接导入定义好的列数组,配合Prisma查询返回的users数据使用:
import { useReactTable } from '@tanstack/react-table'; import { userColumns } from './userColumns'; import { prisma } from './path-to-prisma-client'; async function UserTable() { const users = await prisma.user.findMany({ skip: 0, take: 10 }); const table = useReactTable({ columns: userColumns, data: users, }); // 表格渲染逻辑... }
Prisma生成的User类型和findMany返回的数据结构完全匹配,用它既能保证类型安全,又能摆脱对组件内typeof users的依赖,完美适配列定义抽离的场景。
内容的提问来源于stack exchange,提问作者rejam_
相关产品推荐
相关产品推荐

