עם טיפוסים ובלי טיפוסים
עשרה דולרים פעמיים הפכו ל־210
אליס מכרה נרות בעבודת יד באינטרנט, וביקשה מ־AI להוסיף לטופס ההזמנה שדה כמות. הבדיקה הראשונה עברה חלק. ואז לקוח אמיתי הזמין שני נרות בעשרה דולרים כל אחד, ואימייל האישור אמר שהסכום הוא 210 דולר. היא בדקה את הקוד, והחשבון נראה לה נכון. אליס לא הבינה למה אותה שורה עבדה בבדיקה שלה ונתנה שטויות ללקוח, והלקוח כבר שילם.
- שפה עם טיפוסים יודעת מה סוג כל ערך. כלי בדיקה תופס הרבה בלבולים לפני שהאפליקציה רצה, גם במקומות שאיש לא כתב בהם את הטיפוס.
- ב־JavaScript רגיל, הטקסט 2 כפול 10 נותן 20, אבל הטקסט 2 ועוד 10 נותן 210, ללא תלונה.
- טיפוסים נעלמים לפני שהאפליקציה פועלת, ולכן יש לבדוק נתונים מטופס כשהם מגיעים.
- תיקון עצל מוסיף "as any", שמכבה את הבדיקה עבור הערך הזה. לעולם אל תקבלו אותו בקוד שנוגע בכסף.
כלי בדיקת טיפוסים מזהה ערכים מסוג שגוי
עשה ואל תעשה
- כשמופיעה שגיאת טיפוס, בקשו מה־AI לתקן את הנתונים.
- בקשו לבדוק נתונים שמגיעים מטפסים עם הגעתם.
- הקדישו תשומת לב מיוחדת לקוד שנוגע בכסף.
- אל תקבלו as any כתיקון.
- אל תניחו שטיפוסים מגינים עליכם מקלט שגוי בטופס.
למה הסכום השתבש
ב־JavaScript רגיל, "2" + 10 → "210", ואף אחד לא מתלונן. TypeScript מסרב לבנות אם הוצהר מספר אבל הטופס שולח טקסט. בודק טיפוסים קורא את הקוד שלכם ומסמן ערכים מהסוג הלא נכון.
טיפוסים נעצרים בדלת
הבודק קורא רק את הקוד שלכם. ברגע שהאפליקציה רצה, הטיפוסים נעלמים, ולכן הם לא יכולים לבדוק מה לקוח מקליד בטופס. דוגמה: הטופס שולח "42" כטקסט — אמתו אותו בשרת כשהוא מגיע.
"as any" מכבה את הבודק
כש־AI נתקל בשגיאת טיפוס, שימו לב איך הוא מתקן. תיקון טוב מתקן את הנתונים. תיקון עצל כותב "as any", וזה אומר לבודק להפסיק להסתכל. בכל מה שנוגע לכסף, השתיקה הזאת היא הבאג.
הדוגמה למטה: קראו את ההערות, אין צורך לכתוב את הקוד הזה.
חפשו בפרויקט שלי as any, @ts-ignore ומקומות שבהם ערך מטופס משמש כמספר בלי המרה. לכל מקום, הסבירו איזו טעות הבודק לא יכול לתפוס בגלל זה, ותקנו את זה כמו שצריך במקום להשתיק אותו.
דוגמה
מצאו איפה טקסט מטופס או מ־URL נשלח למקום שמצפה למספר. תקנו את המקומות האלה כך שערך מהסוג הלא נכון לא יחליק פנימה, ואז הראו לי את בדיקת ה־type עוברת בלי שגיאות.
הדביקו את ההנחיות לסוכן מתוך תיקיית פרויקט. כשההנחיה אומרת "הפרויקט הזה", הכוונה לאפליקציה שבונים בתרגול או לאפליקציה שכבר יש לכם. עדיין אין פרויקט? קראו עכשיו והדביקו אחר כך, בתרגול.
מצאו בפרויקט הזה מקום אחד שבו טקסט אולי משמש כמספר, והראו איזה type של TypeScript היה חוסם את זה.
עצרו את הטעות הזו של ה־AI: שולחים כלום למקום שבו חייב להיות אובייקט order. הראו לי את השינוי הקטן ביותר שגורם לבדיקת ה־type לתפוס את זה, ואז הוכיחו שהבדיקה עוברת.
הרגע השתמשתם ב־"as any" כדי להשתיק שגיאת type. בטלו את זה ותקנו את הבעיה האמיתית. תסבירו במילים פשוטות מה היה לא בסדר בנתונים.