TypeScript 如何做数据库类型

很多开发朋友刚接触TypeScript时,会觉得它“多此一举”——JavaScript写代码跑起来才管用,加类型不是给自己添麻烦吗?但要是你踩过“把用户年龄字符串当成数字算,导致统计结果错一半”“改了接口字段,前端和后端各跑各的bug”的坑,就会发现TypeScript的类型,其实能帮你把“不靠谱的不确定”变成“看得见的确定”。而当我们要把数据和数据库绑在一起时,它的类型就不是“代码里的小标记”,而是能贯穿前后端、数据库的“统一说明书”,今天就聊聊怎么用TypeScript把数据库里的东西“管明白”。

第一步:先搞懂——数据库的数据和TypeScript类型为啥要对应

举个最生活化的例子:你家超市的进货台账(相当于数据库)里,每一样商品都有“编号(数字)”“名称(文字)”“库存(整数)”“是否上架(是/否)”这几栏,这些数据都是固定格式的,不会今天库存写“草莓”、明天名称写3,否则台账就乱了。

TypeScript 如何做数据库类型

TypeScript的作用,就是让代码里用这些数据的地方,和台账的格式完全对上,相当于你写代码时,就提前在脑子里记好“这个商品的库存一定是整数,不能是带小数点的数字”,写代码时就不会写错。而要把数据库和TypeScript类型绑死,最常用的就是“工具插件”,不用自己手写所有规则,不然太费劲。

第二步:用工具把数据库表“一键转成”TypeScript类型

刚才说手写类型太麻烦,比如你有个用户表,字段有id、name、email、register_time、is_vip,全手写类型要写好几行,还容易写错。现在有个叫prisma的工具(还有别的工具,这个最常用),它的逻辑是:你先告诉它“我要连哪个数据库,表是什么样的”,它就能自动生成和数据库表完全对应的TypeScript类型,相当于给你自动抄一遍超市台账,还把每栏的格式标清楚。

比如你只要在配置里写清楚数据库的地址和表结构,运行一行命令,就能得到这样的TypeScript类型:

`typescript

type User = {

id: number; // 对应数据库里的自增数字ID

name: string; // 对应数据库里的文字姓名

email: string; // 对应数据库里的邮箱(TypeScript里可以加个“格式校验”的小约定,实际还能配合工具检查)

registerTime: Date; // 对应数据库里的日期时间,TypeScript里用Date类型比字符串靠谱

isVip: boolean; // 对应数据库里的布尔值,直接是true/false,不用转来转去

}

`

这一步的好处是:只要数据库表改了,你重新运行命令,类型自动跟着变,再也不会出现“数据库加了新字段,代码里没接收到”的低级错误。

第三步:用类型约束数据库的“增删改查”,避免出错

光有类型还不够,得让代码操作数据库时,必须按类型来写,不然类型就白设了。还是用超市台账的例子:你要给台账加新商品,就必须填“编号(数字)”“名称(文字)”,不能只填个名称就提交,不然台账会乱。

比如你要写代码把新用户加到数据库里,用刚才生成的User类型来约束:

`typescript

// 错误写法:漏了isVip字段,或者把id写成字符串

const newUser = {

name: "张三",

email: "zhangsan@example.com",

registerTime: new Date()

};

// 运行代码时TypeScript会直接报错:“你这个对象缺少isVip字段,id也应该是数字”

// 正确写法:完全符合User类型的要求

const newUser: Omit<User, "id"> = { // Omit是TypeScript的小技巧,意思是“去掉id字段(因为id是数据库自动生成的,不用手动传)”

name: "张三",

email: "zhangsan@example.com",

registerTime: new Date(),

isVip: false

};

`

这样一来,哪怕你写代码时走神,也不会把不该有的数据塞到数据库里,数据库的“干净程度”会好很多。

最后:别把类型当“摆设”,要和实际需求挂钩

很多人用TypeScript做数据库类型时,会犯一个错:追求“所有字段都要标类型”,但忽略了实际业务需求。比如数据库里的“用户备注”是允许为空的,你就应该把类型写成string | null,而不是强制要求必须是字符串——不然代码里每次取备注都要判断“是不是空”,反而麻烦。

再举个例子:数据库里的“商品价格”是小数,就不能只写number,最好写成number & { __brand: "Price" }(这是TypeScript的“类型品牌”小技巧),避免不小心把价格和库存的数字搞混,比如把价格19.9当成库存19来统计。

其实TypeScript和数据库的类型绑定,核心就是“用看得见的规则,把之前靠‘记忆’‘约定’来保证的事,变成代码能自动检查的事”,不用再怕改接口、怕数据格式乱,相当于给你的数据库加了一层“自动纠错的保护层”。

上一篇 PHP 如何获取请求方法