דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. טייפסקריפט - טייפ מותנה

טייפסקריפט - טייפ מותנה

מתוזמן נעוץ נעול הועבר תכנות
13 פוסטים 3 כותבים 318 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • dovidD מנותק
    dovidD מנותק
    dovid ניהול
    כתב ב נערך לאחרונה על ידי dovid
    #2

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

    function doSomething (mode: string, data: {num: number, str: string}) {
    
    צדיק תמיםצ תגובה 1 תגובה אחרונה
    1
    • צדיק תמיםצ מנותק
      צדיק תמיםצ מנותק
      צדיק תמים
      השיב לdovid ב נערך לאחרונה על ידי צדיק תמים
      #3

      @dovid כתב בטייפסקריפט - טייפ מותנה:

      הכי פשוט זה לעשות משתנה על שמתאים לשני המקרים, למשל במקרה שלך ככה:

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

      Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
      טיפים

      תגובה 1 תגובה אחרונה
      0
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        כתב ב נערך לאחרונה על ידי
        #4

        סליחה, אני רואה שזה אפשרי
        https://stackoverflow.com/questions/61734515/typescript-second-parameter-params-type-based-on-first-parameter
        הדוגמה שמה ממחישה זאת, עוד לא הבנתי איך.

        חגיח תגובה 1 תגובה אחרונה
        1
        • חגיח מנותק
          חגיח מנותק
          חגי
          השיב לdovid ב נערך לאחרונה על ידי חגי
          #5

          @dovid
          לקחתי את הדוגמה הזו ובניתי ממנה את זה:
          https://www.typescriptlang.org/play?#code/C4TwDgpgBAsiAq5oF4oG8CwAoKUCGAJgQFzoB2ArgLamVUBGEATgL4A0U2uFYkTpaAM7B+UYUwCWZAOYtsLANzYAZhTIBjYBID2ZKAW0BlbVQjAAFlOkAeeFAgAPYBDIFBUANYQQ25bARIHADS9k4ubv6IkADa8AC6AHwAFFTaBBCk8BwEeMB4pEEAlFAFUAA+UGrpylIQBOhcuFASfilpKKgA5IQEncWYOE1D6rrC6FB0UCxQqDl5SoNDuExmFEx6kwDUUACMC0PTEAA2gtAtUG3pM108fH0Ni0sjZGNoYiJTM-q5ePtLy6t1u8mAA6YDaACqvGYAGE8KckoU-rg5I8VsA1mQFqiDMZTBYrElukROhw0HRSDsWEjsLiTGZLDIibdmKT0OJSJ0dgAmADMnWpCzp+MZ0iJPP5ZI5UC5fIFNKwwoZhOJvSlIk5EvlCyAA

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

          (כרגע מה שיש לי להציע זה להוסיף המרות בתוך הפונקציה, אבל זה לא יפה).

          צדיק תמיםצ 2 תגובות תגובה אחרונה
          1
          • dovidD מנותק
            dovidD מנותק
            dovid ניהול
            כתב ב נערך לאחרונה על ידי
            #6
            פוסט זה נמחק!
            חגיח תגובה 1 תגובה אחרונה
            1
            • חגיח מנותק
              חגיח מנותק
              חגי
              השיב לdovid ב נערך לאחרונה על ידי
              #7
              פוסט זה נמחק!
              תגובה 1 תגובה אחרונה
              1
              • צדיק תמיםצ מנותק
                צדיק תמיםצ מנותק
                צדיק תמים
                השיב לחגי ב נערך לאחרונה על ידי צדיק תמים
                #8

                @חגי כתב בטייפסקריפט - טייפ מותנה:

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

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

                Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                טיפים

                תגובה 1 תגובה אחרונה
                1
                • dovidD מנותק
                  dovidD מנותק
                  dovid ניהול
                  כתב ב נערך לאחרונה על ידי
                  #9
                  פוסט זה נמחק!
                  תגובה 1 תגובה אחרונה
                  1
                  • dovidD מנותק
                    dovidD מנותק
                    dovid ניהול
                    כתב ב נערך לאחרונה על ידי dovid
                    #10

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

                    צדיק תמיםצ תגובה 1 תגובה אחרונה
                    1
                    • צדיק תמיםצ מנותק
                      צדיק תמיםצ מנותק
                      צדיק תמים
                      השיב לdovid ב נערך לאחרונה על ידי
                      #11

                      @dovid כתב בטייפסקריפט - טייפ מותנה:

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

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

                      Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                      טיפים

                      תגובה 1 תגובה אחרונה
                      0
                      • צדיק תמיםצ מנותק
                        צדיק תמיםצ מנותק
                        צדיק תמים
                        השיב לחגי ב נערך לאחרונה על ידי צדיק תמים
                        #12

                        @חגי @חגי תודה רבה, שילבתי בקוד שלי ועובד מעולה!
                        אבל משום מה האכיפה היא רק כל עוד חסרים פרופרטי'ס, אבל אם יש התאמה ואני רק מוסיף פרופרטי נוסף שלא מוגדר - אין שגיאה...
                        דוגמה (בשתי הדוגמאות בסוף אמור להיות שגיאה)

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

                        Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                        טיפים

                        חגיח תגובה 1 תגובה אחרונה
                        0
                        • חגיח מנותק
                          חגיח מנותק
                          חגי
                          השיב לצדיק תמים ב נערך לאחרונה על ידי
                          #13

                          @צדיק-תמים
                          אופס 🙂
                          https://www.typescriptlang.org/play?#code/C4TwDgpgBAsiAq5oF4oG8CwAoKuoEMATQgLnSgDsBXAWzOpoCMIAnKAXwBps8oqxILMmigBnYELESAlhQDmHbOwDc2AGZUKAY2DSA9hSiE9AZT00IwABay5AHnhQIAD2AQKhUVADWEEHrVYBCQAPgAKGj1CCDJ4TiN8YHwyOERIAG14AF0ASjJxFlsoAB8+Dwg1WQhCdB48AHp6qGlAiKiUVAByIkJOnNqcBqbeLQNxcgYOKFRCRPxVQdxG3igWSyoWQ0mAaigARgXeZfYnABtRaBaoNujprv5BPoGj4bxRinGRAqmZucOhlZrYAbQwFAB0wD0AFUBKwAML4C5hHL-JZNdh1XBAkELDFYbDGMwWay2MLdYideIiNT4XxkPYcFEE0zmSw2eRknqUia0enxGl0qAAJkZCyAA

                          תגובה 1 תגובה אחרונה
                          3

                          בא תתחבר לדף היומי!
                          • התחברות

                          • אין לך חשבון עדיין? הרשמה

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