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

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

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

Typescript - החזרת סוג מותנה

מתוזמן נעוץ נעול הועבר תכנות
7 פוסטים 3 כותבים 230 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ש מנותק
    ש מנותק
    ש.ב.ח.
    כתב ב נערך לאחרונה על ידי ש.ב.ח.
    #1

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

    דוגמא להטרדה...
    יצרתי רכיב עוטף לreact-select
    הרכיב מקבל את הprops המקורי של react select מלבד הonChange והvalue
    שהערך אצלי ברכיב מגיע כמחרוזת או מערך של מחרוזות(במקרה של בחירה מרובה)
    כך גם הפונקציה מקבלת ארגומנט זהה ולא סוג האפשרות.

    וכך נראה הדריסה שלי:

    type SelectProps = Omit<ReactSelectProps<OptionType>,
        'value' | 'onChange'
    > & {
        value?: | string | string[] | undefined;
        options: (OptionType | GroupType)[];
        onChange: (value: string | string[] | null) => void;
    }
    
    <ReactSelect <OptionType, boolean>
        {...props}
        onChange={handleChange}
    </ReactSelect>
    

    הנקודה היא שבשימוש באותו רכיב אני רוצה שהפונקציה onChange תדע עם הערך שחוזר הוא מערך או מחרוזת בודדת לפי ההגדרה של isMulti.

    כרגע היא מחזרה כאמור כך:

    onChange: (value: string | string[] | null) => void;
    

    מאמין ששייך להתנות, אבל איך?

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

      @ש-ב-ח כתב בTypescript - החזרת סוג מותנה:

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

      זה ברור כשמש.

      @ש-ב-ח כתב בTypescript - החזרת סוג מותנה:

      כמו שזה עוזר למי שבפנים (מאמונה בלבד)

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

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

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      2
      • yossizY מנותק
        yossizY מנותק
        yossiz
        השיב לש.ב.ח. ב נערך לאחרונה על ידי yossiz
        #3

        @ש-ב-ח לכאורה אתה יכול לגנוב מהטייפים שמגיעים עם הספרייה (ועל הדרך ללמוד איך עושים דברים כאלו בטייפסקריפט)

        העתקתי את החלק שנראה לי רלוונטי

        type SingleValue<Option> = Option | null;
        type MultiValue<Option> = readonly Option[];
        
        type OnChangeValue<Option, IsMulti extends boolean> = IsMulti extends true ? MultiValue<Option> : SingleValue<Option>;
        
        interface Props<Option, IsMulti extends boolean, Group extends GroupBase<Option>> {
          // ...
          onChange: (newValue: OnChangeValue<Option, IsMulti>, actionMeta: ActionMeta<Option>) => void;
          // ...
        }
        

        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

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

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

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

            @ש-ב-ח כתב בTypescript - החזרת סוג מותנה:

            אמנם חשבתי שאפשר ליצור את התנאי על בסיס אחד מprops של הקומפוננטה.

            טייפסקריט הוא שפה סטטית, אי אפשר לעשות שום דבר על סמך משהו שמתברר רק בזמן ריצה

            אפשרות זו מחייבת אותי להוסיף פרופס isMulti ואת הארגומנט הטייפסקריפטי IsMulti

            לכאורה אתה לא צריך להוסיף פרופס isMulti, אפשר להוציא אוטומטית מהטייפ של Option אם זה multi או לא
            משהו כזה:

            type OnChangeValue<Options> = Options extends Array<Option> ? MultiValue<Option> : SingleValue<Option>;
            

            📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

            ש תגובה 1 תגובה אחרונה
            0
            • ש מנותק
              ש מנותק
              ש.ב.ח.
              השיב לyossiz ב נערך לאחרונה על ידי ש.ב.ח.
              #6

              @yossiz כתב בTypescript - החזרת סוג מותנה:

              טייפסקריט הוא שפה סטטית, אי אפשר לעשות שום דבר על סמך משהו שמתברר רק בזמן ריצה

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

              @yossiz כתב בTypescript - החזרת סוג מותנה:

              לכאורה אתה לא צריך להוסיף פרופס isMulti, אפשר להוציא אוטומטית מהטייפ של Option אם זה multi או לא
              משהו כזה:

              לא מכוון לאמת...
              האפשריות הם תמיד מרובות, השאלה אם המשתמש יכול לבחור אחת מהם או כמה מהם.

              yossizY תגובה 1 תגובה אחרונה
              1
              • yossizY מנותק
                yossizY מנותק
                yossiz
                השיב לש.ב.ח. ב נערך לאחרונה על ידי yossiz
                #7

                @ש-ב-ח כתב בTypescript - החזרת סוג מותנה:

                לא מכוון לאמת...

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

                type OnChangeValue<Option, SelectProps> = SelectProps extends { isMulti: true } ? MultiValue<Option> : SingleValue<Option>;
                

                📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

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

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

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

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