การ Import
- +MUST ใช้การย่อ path เสมอ เพื่อลดความยากในการอ่าน
- +MUST ถ้าใช้การ auto import กรุณาตรวจสอบความถูกต้องทุกครั้ง
import { formatNumeric } from '@/functions'; /// หรือ ถ้ามี type ด้วย import { type FormatNumericFunc, formatNumeric } from '@/functions';
รูปแบบการประกาศ
-
+MUST ใช้ arrow function และ กำหนด parameter ในรูปแบบ object เสมอ เพื่อให้โค้ดไปในทิศทางเดียวกัน และง่ายต่อการเรียกใช้งาน
-
+SHOULD ใส่ return type เมื่อจำเป็น (ใส่ตลอดได้ยิ่งดี)
✔️ ทำ
const sampleFunc = () => { ... } const sampleFunc = ({ firstParam, secondParam, ... }: SampleFuncParams) => { ... return ''; } const sampleFunc = ({ firstParam, secondParam, ... }: SampleFuncParams): string => { ... return ''; }❌ ไม่ทำ
function sampleFunc() { ... } function sampleFunc(firstParam: string, secondParam: string) { ... return ''; } const sampleFunc = (firstParam: string, secondParam: string): string => { ... return ''; }
ตัวอย่างการประกาศและใช้งาน
-
ประกาศ
const formatNumeric = ({ value, minFractionDigit = 0, maxFractionDigit = 0 }: FormatNumericInput): string => { ... } -
กำหนด Type
interface FormatNumericInput { value?: number | null; minFractionDigit?: number; maxFractionDigit?: number; } -
ใช้งาน
const formatted = formatNumeric({ value: 1234.56, minFractionDigit: 2, maxFractionDigit: 4 });
เกณฑ์การตั้งชื่อ
-
ฟังก์ชันที่เรียกจาก action ของ user
✔️ ทำ
const onClickExport: () => void = () => { ... } const onChangeCitizenId: () => void = () => { ... } const onSelectBatchGroup: () => void = () => { ... } /** เฉพาะกับ Form */ const onSubmit: () => void = () => { ... } // การ submit ปกติมีเพียงแค่ form จึงไม่ต้องเขียนยาว ยกเว้นมีมากกว่า 1 form const onFinishForm: () => void = () => { ... } // หากเพียงแค่ "onFinish" อาจไม่เข้าใจว่า finish อะไร❌ ไม่ทำ
const handleExport: () => void = () => { ... } const handleCitizenId: () => void = () => { ... } const handleBatchGroup: () => void = () => { ... } const onSave: () => void = () => { ... } // save อะไร แล้วมาจาก action ใด const onFinish: () => void = () => { ... } // finish อะไร แล้วมาจาก action ใด -
ฟังก์ชันที่เรียกโดยการทำงานภายใน (เป็นการแยกส่วนของโค้ด)
✔️ ทำ
const getItemById: () => ItemData = () => { ... return ... } const createItem: () => Promise<void> = async () => { ... return ... } const resolvePermission: (role: Role) => PermitInfo = () => { ... return ({ canCreate: false, canRead: true, canUpdate: false, canDelete: false }); }❌ ไม่ทำ
const callGetItemById: () => ItemData = () => { ... return ... } const processCreateItem: () => Promise<void> = async () => { ... return ... } // check ให้ความรู้สึกเหมือนจะได้ boolean มากกว่า แต่ก้ไม่ควรใช้ check อยู่ดี const checkPermission: () => PermitInfo = () => { ... return ({ canCreate: false, canRead: true, canUpdate: false, canDelete: false }); }