虽然 TypeScript 主要用于客户端,而数据模型的设计主要是服务端来做的。 但是要写出优雅的代码,也还是有不少讲究的。
让我们从一个简单的我的文章列表 api 返回的数据开始,返回的文章列表的信息如下:
{"id": 2018,"title" : "TypeScript 数据模型层的编程最佳实践","created" : 1530321232,"last_modified" : 1530320620,"status": 1
}
同时服务端告诉我们说:
status 各值的意思 0/未发布, 1/已发布, 2/已撤回
最佳实践一: 善用枚举,No Magic constant
对于 status
这种可枚举的值,为了避免写出 status === 1
这种跟一个魔法常量的比较的代码,最佳的做法是写一个枚举,并配套一个格式化为字符串表示的函数,如下:
/**
* 文章状态
*/
const enum PostStatus {/** * 草稿 */draft = 0,/** * 已发布 */published = 1,/** * 已撤回 */revoked = 2
}
function formatPostStatus(status: PostStatus) {switch (status) {case PostStatus.draft:return "草稿";case PostStatus.published:return "已发布";case PostStatus.revoked:return "已撤回";}
}
如果 PostStatus
状态比较多的话,根据喜好可以写成下面的这样。
function formatPostStatus(status: PostStatus) {const statusTextMap = {[PostStatus.draft]: "草稿",[PostStatus.published]: "已发布",[PostStatus.revoked]: "已撤回"};return statusTextMap[status];
}
考虑到返回的 created
是时间戳值,我们还需要添加一个格式化时间戳的函数: