@odeddvir ניתן לטפל בעניין ע"י שימוש נכון בתחביר.
אפשרות אחת היא שימוש בUnion type, לדוגמא string | Date מייצג ערך שיכול להיות Date או String.
interface Person {
name: string;
dob: string | Date;
}
Union type מאפשר לך לגשת למאפיינים שמשותפים לכל הסוגים המרכיבים את הUnion ללא כל בעיה, אולם כדי לגשת למאפייינים היחודיים לאחד מהסוגים המרכיבים את הUnion נדרשת המרה של הUnion לסוג הספיציפי הדרוש ע"י בדיקת JS שהסוג אכן תואם והמהדר של Typescript ידייק וישנה את הסוג המוצהר (הUnion) לסוג הספיציפי, לדוגמא:
person.dob.getDay() // Error: getDay does not exist on type string
if (typeof person.dob === 'object') {
person.dob.getDay() // Date בתוך התנאי הסוג הוא
}
דרך נוספת היא ליצור שני מודלים, הראשון יייצג את הערך היוצא לשרת (Outbound), והשני יייצג את הערך שחוזר מהשרת (Inbound) לדוגמא:
interface PersonBase {
name: string;
}
interface ResponsePerson extends PersonBase {
dbo: string;
}
class Person implements PersonBase {
constructor(public name: string, public dbo: Date) { }
public static fromPersonResponse({ name, dbo }: ResponsePerson): Person {
return new Person(name, new Date(dbo))
}
}