前端与数据库交互时,通常需要将数据库的字段类型与 TypeScript 中的数据类型进行对应。不同数据库(如MySQL、PostgreSQL、MongoDB 等)有不同的数据类型,而 TypeScript的类型系统也有它自己的一套规则。
下面是常见数据库类型与 TypeScript 类型的对应关系。
省流
- 小写字母版本
数据库类型 | TypeScript 类型 |
---|---|
varchar, text | string |
char | string |
enum | string |
int, integer | number |
bigint | bigint |
decimal, numeric | number |
float, double | number |
date | string (iso 8601 format) |
datetime, timestamp | string (iso 8601 format) |
time | string (hh:mm:ss format) |
year | number |
boolean | boolean |
tinyint(1) | boolean |
blob, binary | buffer |
varbinary | buffer |
json | record<string, any> 或 object |
uuid | string |
- 大写字母版本
数据库类型 | TypeScript 类型 |
---|---|
VARCHAR, TEXT | string |
CHAR | string |
ENUM | string |
INT, INTEGER | number |
BIGINT | bigint |
DECIMAL, NUMERIC | number |
FLOAT, DOUBLE | number |
DATE | string (ISO 8601 format) |
DATETIME, TIMESTAMP | string (ISO 8601 format) |
TIME | string (HH:mm:ss format) |
YEAR | number |
BOOLEAN | boolean |
TINYINT(1) | boolean |
BLOB, BINARY | Buffer |
VARBINARY | Buffer |
JSON | Record<string, any> 或 object |
UUID | string |
详细对应关系
- 字符串类型
数据库类型 | TypeScript 类型 | 详情 |
---|---|---|
varchar, text | string | 存储文本或字符串数据 |
char | string | 固定长度的字符串,通常在数据库中用于存储短文本,如邮政编码、状态码等 |
enum | string | 存储预定义的枚举值 |
- 数字类型
数据库类型 | TypeScript 类型 | 详情 |
---|---|---|
int, integer | number | 用于存储整数类型数据 |
bigint | bigint | 用于存储大整数类型数据,超出了 number 范围的整数 |
decimal, numeric | number | 用于存储带有小数部分的数字,通常用于金额等精确数值 |
float, double | number | 用于存储浮动小数点数,精度较低的浮动类型 |
- 日期和时间类型
数据库类型 | TypeScript 类型 | 详情 |
---|---|---|
date | string (iso 8601 format) | 存储文本或字符串数据 |
datetime, timestamp | string (iso 8601 format) | 日期,通常存储为字符串格式,YYYY-MM-DD |
time | string (hh:mm:ss format) | 日期和时间,通常为 YYYY-MM-DDTHH:mm:ssZ 格式 |
year | number | 时间类型,表示时分秒 |
- 布尔类型
数据库类型 | TypeScript 类型 | 详情 |
---|---|---|
boolean | boolean | 存储 TRUE 或 FALSE 的布尔值 |
tinyint(1) | boolean | 在一些数据库中,TINYINT(1) 被用作布尔值的表示方式 |
- 二进制数据类型
数据库类型 | TypeScript 类型 | 详情 |
---|---|---|
blob, binary | buffer | 存储二进制数据,通常是图片、文件等 |
varbinary | buffer | 存储变长的二进制数据 |
- JSON 类型
数据库类型 | TypeScript 类型 | 详情 |
---|---|---|
json | record<string, any> 或 object | 用于存储 JSON 格式的数据(通常是一个对象) |
- UUID 类型
数据库类型 | TypeScript 类型 | 详情 |
---|---|---|
uuid | string | 存储 UUID 字符串,通常用于唯一标识符 |
注意与总结
-
日期格式:在数据库中,日期和时间通常是以字符串的形式存储(例如 ISO 8601 格式),在 TypeScript 中,我们通常将它们表示为 string 类型。如果需要进行日期计算或操作,可以考虑使用 Date 类型,或者使用日期库(如 moment.js 或 date-fns)。
-
精度问题:数据库中的 FLOAT 和 DOUBLE 类型可能会有精度问题,如果需要非常高的精度,考虑使用 DECIMAL 或 NUMERIC 类型。同时,TypeScript 中的 number 可能不适用于非常精确的数值计算,在这种情况下,推荐使用 BigDecimal 或 BigInt(对于整数)。
-
类型转换:某些数据库会使用不同的方式表示布尔值(例如,MySQL 中 TINYINT(1)),这可能需要在程序中进行转换。在 TypeScript 中,boolean 类型对应的是 true 或 false。
-
在 TypeScript 中,使用 number 来表示大多数数字类型(整数和浮动数值),而使用 string 来表示文本和日期类型。
-
数据库中存储的 JSON 数据可以使用 Record<string, any> 或 object 来表示。
-
特殊类型(如 UUID 和 BLOB)通常映射为 string 和 Buffer 类型。
-
使用合适的类型确保数据结构和类型的正确性有助于避免运行时错误。