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

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

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

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

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

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

    function doSomething (mode: string, data: {num: number, str: string}) {
    
    צדיק תמיםצ מנותק
    צדיק תמיםצ מנותק
    צדיק תמים
    כתב ב נערך לאחרונה על ידי צדיק תמים
    #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
      • dovidD dovid

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

        חגיח מנותק
        חגיח מנותק
        חגי
        כתב ב נערך לאחרונה על ידי חגי
        #5

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

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

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

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

            פוסט זה נמחק!

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

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

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

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

              צדיק תמיםצ מנותק
              צדיק תמיםצ מנותק
              צדיק תמים
              כתב ב נערך לאחרונה על ידי צדיק תמים
              #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
                  • dovidD dovid

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

                    צדיק תמיםצ מנותק
                    צדיק תמיםצ מנותק
                    צדיק תמים
                    כתב ב נערך לאחרונה על ידי
                    #11

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

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

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

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

                    תגובה 1 תגובה אחרונה
                    0
                    • חגיח חגי

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

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

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

                      צדיק תמיםצ מנותק
                      צדיק תמיםצ מנותק
                      צדיק תמים
                      כתב ב נערך לאחרונה על ידי צדיק תמים
                      #12

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

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

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

                      חגיח תגובה 1 תגובה אחרונה
                      0
                      • צדיק תמיםצ צדיק תמים

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

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

                        חגיח מנותק
                        חגיח מנותק
                        חגי
                        כתב ב נערך לאחרונה על ידי
                        #13

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

                        תגובה 1 תגובה אחרונה
                        3
                        תגובה
                        • תגובה כנושא
                        התחברו כדי לפרסם תגובה
                        • מהישן לחדש
                        • מהחדש לישן
                        • הכי הרבה הצבעות


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

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

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