javascript - לפרק אובייקט עם ממשק


יש לי את הקוד הזה:

const {items} = this.props;

אבל, אני צריך להגדיר את הממשק למשתנה הקבוע items

ואני לא רוצה לעשות זאת:

const items: ItemsInterface = this.props.items

אפשרי?

תשובה #1

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

תחביר ההערות סוג משתף פעולה במבוכה ובעייתיות עם תחביר הפירוק.

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

  1. הפשוט ביותר הוא ליישם הצהרת סוג בצד הימני של הביטוי

    const {items} = <{items: ItemsInterface}>this.props;
    

    או באופן שקול

    const {items} = this.props as {items: ItemsInterface};
    

    כמובן שזה מרובה מילים, אבל זה ברור, נכון ומובן מאליו.

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

    const {items}: {items: ItemsInterface} = this.props;
    

    אני אישית מוצא את זה מביך וקצת קשה לקריאה. ההערת סוג שמיוחסת לביטוי הבלתי ממוספר {items}.

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

    const {items = <ItemsInterface>{}} = this.props;
    

או באופן שקול

    const {items = {} as ItemsInterface} = this.props;

בכל מקרה, אין דרך להימנע מחזרה על השם items אלא אם כן אתה מאתחל עם ערך ברירת מחדל.

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