تایپاسکریپت - انگولار ۲ ایجاد یک کلاس با مقادیر خالی


چگونه اعضا را به عنوان کلاس با مقادیر خالی نمونهسازی میکنید؟

پلانکر

من با ... نمونهسازی میکنم

public members = new MemberClass();

اما کنسول نشان میدهد اعضا: {} بنابراین من قادر به تنظیم مقادیر پیشفرض خالی نیستم

پس اساساً من دارم تلاش میکنم یک ساختار خالی شبیه به این را بازتولید کنم:

this.members = [ 
    { 
      "Name" : "", "Id" : "", "Team" : "",
      "Cases" : {
        "history" : []
      }
    }
];

پاسخ شماره ۱

از اینترفیسها استفاده کنید ;) و این یک روشی است که میتوانید یک آرایه با یک شیء خالی از نوع Member با ویژگیهای تنظیم شده ایجاد کنید. من مورد استفاده آن را نمیدانم، حداقل من ویژگیها را برای اشیاء/آرایههای خالی مدلها تنظیم نمیکنم، اما حالا شروع میکنیم :)

پس ابتدا رابطهای شما، که عبارتند از:

export interface Member {
    Id: string;
    Name: string;
    Cases: Case[];
}
export interface History {
    Id: string;
    CaseNumber: string;
}
export interface Case {
    History: History[];
}

سپس شما ۳ تابع برای تعیین ویژگیها ایجاد میکنید:

export function createMember(Id?:string,Name?:string, Cases?:Case[]): Member {
  return {
    Id,
    Name,
    Cases[createCase()]       
  }
}

export function createCase(History?:History[]): Case {
  return {
    History[createHistory()]
  }
}

export function createHistory(Id?: string,CaseNumber?:string): History {
  return {
    Id,
    CaseNumber
  }
}

و اکنون در کامپوننت خود میتوانید تابع createMember را فراخوانی کنید، که سپس دو تابع دیگر را فراخوانی میکند:

members = [createMember()];

پینوشت: طبق مدلهای شما، مورد زیر مدل آرایه Member نیست، نام و ساخت آن مطابقت ندارد، اما من مورد بالا را بر اساس مدلهایی که ارائه کردهاید ایجاد کردهام.

پاسخ شماره ۲

به خاطر داشته باشید که شما در آنجا از اینترفیسها استفاده میکنید، نه کلاسها. در تایپاسکریپت، همانند جاوااسکریپت، یک شیء خالی فقط {} است

بنابراین، برای انجام کاری که به دنبال آن هستید، این را امتحان کنید: let history: History={ Id:"", CaseNumber:""};

اگر تلاش کنید هر یک از این ویژگیها را حذف کنید، خطایی دریافت خواهید کرد که آنها الزامی هستند. اگر میخواهید ویژگیهای یک اینترفیس هنگام نمونهسازی اختیاری باشند، این اینترفیس را به این صورت بهروزرسانی کنید: CaseNumber?: string;

بیشتر را در دفترچه راهنما پیدا کنید.

برای توضیح بیشتر: یک کلاس یک نوع مشخص است که میتوانید نمونهسازی کنید و همانطور که در هر زبان دیگری استفاده میکنید، استفاده کنید. اگر به سازنده یا مقادیر پیشفرض برای ویژگیهایتان نیاز دارید، باید از export class MyType {} استفاده کنید.

با این حال، به تجربه من، متوجه شدهام که رابطها در تایپاسکریپت در بسیاری از موارد مفیدتر از کلاسها هستند. دلیل این امر این است که میتوانید در زمان توسعه با آنها برنامهنویسی کنید، اما هنگام ارسال محصول، آنها در بستههای شما گنجانده نمیشوند (توجه: این کاملاً به مورد استفاده شما بستگی دارد).