• בלוג
  • ארבע תשובות להתנגדויות נפוצות לטייפסקריפט

ארבע תשובות להתנגדויות נפוצות לטייפסקריפט

05/11/2022

רוצים להכניס טייפסקריפט לפרויקט אבל חברי הצוות עושים פרצוף? הנה ארבע תגובות שלפעמים אנחנו שומעים על טייפסקריפט, ומה לענות בכל מצב.

1. אני בחיים לא טועה בטיפוסים

אני מתחיל עם המתכנת הגאון שתמיד כל הקוד שלו עובד מהפעם הראשונה, בחיים הוא לא טועה בטיפוסים ויודע את כל ה API של כל הקוד במערכת בעל פה. "בשביל מה אני צריך טייפסקריפט?" הוא ישאל, "המוח שלי עובד יותר מהר מכל מחשב".

במצבים כאלה אנחנו יכולים להזכיר לחבר שהוא לא עובד לבד, ושלמרות שהוא המתכנת הכי-טוב-בעולם שאף-פעם-לא-טועה-בטיפוסים לפעמים אנשים אחרים יכניסו למערכת קוד מבלבל, ובפרויקט גדול אי אפשר לקרוא ולהכיר כל שורת קוד שמישהו מכניס. כשצריך לתקן באג בקטע קוד שלרוב אתה לא עובד עליו, מאוד עוזר כשיש כלי שקורא אתך את הקוד ומוודא שלא העברת פרמטר מהטיפוס הלא נכון.

בנוסף, בשימוש בספריות חיצוניות חדשות יכול להיות שאתה עדיין לא מכיר בעל פה את כל הממשק שלהן. השלמה אוטומטית של סביבת הפיתוח יכולה לחסוך מעבר לחלון הדפדפן כדי לחפש בתיעוד ובסך הכל להגביר את מהירות הפיתוח.

ואפילו אם אתה מכיר כל שורת קוד במערכת ואת ה API של כל הספריות החיצוניות, היכולת של טייפסקריפט בלחיצת כפתור לשנות שם של משתנה בכל הפרויקט (במקום שתצטרך לעבור על כל המקומות בהם המשתנה הזה מופיע) מביאה לזה שיהיה יותר קל לשנות שמות ולבחור את השמות הנכונים לפונקציות ולמשתנים שלנו.

2. טייפסקריפט רק מאט את הבניה

התנגדות מספר 2 תגיע מאנשים שדווקא היו שמחים להכניס את טייפסקריפט לפרויקט אבל יש להם כבר מספיק ניסיון עם וובפאק כדי לדעת שכל פלאגין חדש יכול לשבור את כל הבילד או להאט אותו משמעותית.

אני מאוד בעד להקשיב לניסיון מר מהעבר, אבל נדמה לי שהמסקנה כאן היא שגויה: הבעיה היא לא טייפסקריפט אלא וובפאק. כלי בניה טובים יותר יגיעו לתוצאות טובות בהרבה. במקרים קיצוניים אפשר לבחור כלי כמו esbuild שפשוט מוחק את כל הגדרות הטיפוסים בבנייה (בלי לבדוק שום דבר) ולהריץ את הבדיקה מתוך ה IDE בנפרד מהבניה.

3. טייפסקריפט רק מאט את הפיתוח

אנשים שחדשים לטייפסקריפט צריכים לעבור עקומת למידה ועד שעוברים אותה לפעמים יש הרגשה שהכלים עובדים נגדך - לא ברור איך לשלב קוד מספריה חיצונית שאין לה הגדרות טיפוסים, הודעות השגיאה של טייפסקריפט יכולות להיות קריפטיות והרבה פעמים טייפסקריפט יכול להסתכל על קוד נכון לגמרי ובכל זאת להתלונן עליו ולדרוש הגדרות טיפוסים יותר מדויקות.

קיימות בעיות אמיתיות עם טייפסקריפט וכל מי שעבדה איתו מספיק נתקלה במקומות שבהם טייפסקריפט הכריח אותנו לכתוב קוד שביום רגיל לא הייתי כותב. ובכל זאת המקומות האלה הם המיעוט - רוב הזמן ככל שמכירים יותר את טייפסקריפט אנחנו מגלים שהטענות שלו כן מבוססות על בעיות אמיתיות בקוד ותיקון של הקוד משמח גם את טייפסקריפט וגם מעלה את הרמה של המערכת.

נכון טייפסקריפט מכריח אותנו לחשוב טוב על הגדרות הטיפוסים שלנו ועל הממשק של כל פונקציה ונכון שזה יכול להאט את הפיתוח בטווח הקצר, אבל במערכות מספיק גדולות התועלת עולה בהרבה על המחיר.

4. טייפסקריפט לא רלוונטי לפרונט-אנד כי ה API שלנו גמיש מדי

מתכנתי פרונטאנד רבים רגילים "לשחק" עם הקוד, ו JavaScript תומך בגישה הזאת אפילו בדוגמאות פשוטות. הפונקציה add בדוגמה:

function add(x, y) {
    return x + y;
}

עובדת מהקופסה גם על מספרים, גם על מחרוזות ועושה את הדבר הנכון. בשביל לכתוב אותה בטייפסקריפט אני כבר צריך להשתמש בכלים מתוחכמים כמו Generics בשביל לקבל בדיוק את אותו אפקט:

function add<T extends number|string>(x: T, y: T) {
    return x + y;
}

זה מוזר לא? חשבתי שאני מוסיף הגדרות טיפוסים קטנות למערכת ופתאום אני צריך ללמוד המון על טייפסקריפט רק בשביל לייצג חתימות נפוצות ופשוטות. מה יקרה כשאגיע לחתימות המסובכות יותר?

ובאמת להוסיף הגדרות טיפוסים דורש היכרות טובה גם עם JavaScript וגם עם הכלים של TypeScript. ככל שהמערכת שלנו מעניינת יותר (ומערכות ווב הן תמיד כאלה), כך זה יהיה יותר קשה לשלב טייפסקריפט בלי להכיר אותה. אבל מצד שני כן צריך לזכור שבמימוש המקורי של add אפשר להפעיל את הפונקציה גם על דברים שהם לא מספרים או מחרוזות - למשל מה לדעתכם תקבלו מהפעלה כזו:

add([1, 2, 3], [4, 5, 6]);

אם אתם לא בטוחים אולי זה סימן ששווה להשקיע בלימוד טייפסקריפט.