Re: [姆咪] 弄了个标记 FF44 摊位的 app

楼主: nh60211as   2025-01-05 21:13:25
又更改了读取资料以及资料验证的方式
* TypeScript 基本知识
TypeScript 可以使用 Union Type 限制物件的值域
比如说一个型别如下
type BoothNumber = {row: string, number: number}
可以输入各种 string 和 number
但是 domain 上实际的 row 只能是 A or B,
而且是 A 的时候 number 只能是 1 or 2,
B number 只能是 1, 2, or 3
可以宣告以下型别
type BoothNumber = {row: "A", number: 1 | 2} | {row: "B", number: 1 | 2 | 3}
达成 compile time (还是 build time?) 的型别检查,避免不合理的值例如
const a: BoothNumber = {row: "ZZZ", number: 87}
出现
* 原来的作法
原来在填资料的时候是完全使用 TypeScript 的型别系统达到资料验证这项目标
流程:
1. 人工产生 TypeScript 物件 Array<BoothNumber>
(这里已经可以让 IDE 在遇到不合理的值就报错)
2. 程式建置并读取物件 Array<BoothNumber>,理论上可以保证没有不合理的值
这里遇到的问题是第一步花费的时间真的太多了,因此思考别的解决方案
* 更新后的做法
1. 人工产生 CSV 档,因为是直接依照资料来源的字段填写,因此只需要复制贴上
资料来源范例:https://www.f-2.com.tw/index.php?q=ff/169824
2. 使用 TypeScript 脚本读取 CSV 档并且转换为物件 Array<BoothNumber> 再转换成
JSON 档
3. 使用 Joi 函式库编写 data schema 验证 JSON 档是否为 Array<BoothNumber>
(这里找了很久就是没有可以直接使用 TypeScript 的型别定义去验证的方法)
4. 程式建置并读取 JSON 档并且强制转型成 Array<BoothNumber>
理论上不能保证没有不合理的值,但是第三步验证过了
这种方法大幅减少了人输入的时间
也应该(?)可以保证资料在程式建置时的正确性,但是 TypeScript 没有原生支援资料验
证满可惜的
※ 引述《nh60211as (xXx_5354M3_31M0_xXx)》之铭言:
: 考量到如果是要在活动会场当天使用网络可能会不稳定
: 所以加了手机安装离线程式教学
: https://i.imgur.com/eu2GXKH.png
: https://github.com/nh60211as/FfMapMarker/blob/master/docs/
: install_on_andriod.md
: 因为是用 PWA 包装的,所以可以让网页就像 Android app 一样像一个程式在管理
: iOS 好像也行,但是我没钱买 iPhone
: 然后买狗摊
: Day 1 Day 2 Day 3
: 角角吉诊室 E27,E28
: 台北人 S03,S04 S33
: 企鹅冰屋 S05 S30
: 坏孤儿 T27,T28
: 龙龙 S25,S26 S25,S26
: 百合室内盆栽 S27 S27
: ※ 引述《nh60211as (xXx_5354M3_31M0_xXx)》之铭言:
: : 懒得用手画地图了
: : 科技时代就该把可以离线做的事情搬上网页
: : https://i.imgur.com/UhPki5S.png
: : 看了一下有买狗的好像是在第二天 S 区
: : https://nh60211as.github.io/FfMapMarker/

Links booklink

Contact Us: admin [ a t ] ucptt.com