האם אפשר ב-TypeScript להכריז על סוג המאפיינים באובייקט אם הם מתווספים בצורה דינמית?


יש לי שיטה כזו.

private getStuff(data: string[]) : CertainType[] { ... }

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

const things: Thing[]; ...
things = [];
output.push(thingy);
console.log(things[3]);

אני עושה את זה:

const stuff: any; ...
stuff = { };
stuff[3] = stuffy;
console.log(things[3]);

אז החתימה של השיטה השתנתה לזה.

private getStuff(data: string[]) : any { ... }

הכל עובד מצוין אבל. אני אוהב את המשתנים עם טיפוס חצי קשיח ב-TypeScript ובגלל שאני מגיע מ-C# אני מאמין בחוזקה במניעת הרבה בעיות על ידי היות (לכאורה) קמצני מראש (בלי להתקרב כמובן לטווח של PO).

מאז שמספר הנכסים אינו ידוע מראש, וגם לא המזהים שלהם, אני תוהה אם any הוא סוג ההגדרה הקרוב ביותר או אם יש משהו המקביל לסינטקס של C# כמו:

Dictionary<string, Thing> dicky;

תשובה #1

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

זה יכול להיכתב כ

const stuff: Record<string, Thingy> = {};

או, באופן מפורט יותר, אך שקול:

const stuff: { [index: string]: Thingy } = {};