انگولار - رویداد حرکت ماوس: رویداد ماوس
من در جاوااسکریپت عالی نیستم، بنابراین تایپاسکریپت برای من حتی سختتر است.
من دارم تلاش میکنم این کد را قرض بگیرم تا بتوانم یک تقویم رویداد در یک برنامه انگولار پیادهسازی کنم.
.subscribe((mouseMoveEvent: MouseEvent) => {
const minutesDiff = ceilToNearest(
mouseMoveEvent.clientY - segmentPosition.top,
30
);
const daysDiff =
floorToNearest(
mouseMoveEvent.clientX - segmentPosition.left,
segmentPosition.width
) / segmentPosition.width;
const newEnd = addDays(addMinutes(segment.date, minutesDiff), daysDiff);
if (newEnd > segment.date && newEnd < endOfView) {
dragToSelectEvent.end = newEnd;
}
this.refresh();
});
من این را به عنوان یک خطا دریافت میکنم:
بارگذاری بیش از حد ۱ از ۲، ''(observerOrNext?: Partial<Observer> | ((value: Event) => void) | undefined): Subscription''، خطای زیر را داد. آرگومان از نوع ''(mouseMoveEvent: MouseEvent) => void'' قابل انتساب به پارامتر از نوع ''Partial<Observer> | ((value: Event) => void) | undefined'' نیست. نوع ''(mouseMoveEvent: MouseEvent) => void'' قابل انتساب به نوع ''(value: Event) => void'' نیست. نوع پارامترها 'mouseMoveEvent' و 'value' ناسازگار هستند. نوع 'Event' ویژگیهای زیر را که در 'MouseEvent' موجود است، ندارد: altKey, button, buttons, clientX و ۲۳ ویژگی دیگر. بارگذاری اضافی ۲ از ۲، '(next?: ((value: Event) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): Subscription'، خطای زیر را ایجاد کرد. آرگومان از نوع '(mouseMoveEvent: MouseEvent) => void' قابل اختصاص به پارامتر از نوع '(value: Event) => void' نیست. نوع پارامترهای 'mouseMoveEvent' و 'value' ناسازگار است. نوع 'Event' قابل اختصاص به نوع 'MouseEvent' نیست
من «تا حدودی» متوجه میشوم که نوعها مطابقت ندارند، اما نمیدانم چگونه کد را تغییر دهم تا عملکردی شود.
در اینجا سایتی است که من در تلاش برای قرض گرفتن کد از آن هستم
https://www.bacancytechnology.com/blog/implement-angular-calendar-component
آیا کسی که مهارتهای تایپاسکریپت خیلی بهتری از من دارد میتواند لطفاً کمک کند؟
پاسخ شماره ۱
فقط MouseEvent را با Event جایگزین کنید، زیرا این نوعی است که در نهایت در subscribe دریافت میشود!
نوع '(mouseMoveEvent: MouseEvent) => void' قابل انتساب به نوع '(value: Event) => void' نیست
.subscribe((mouseMoveEvent: Event) => { // <- changed here!
const minutesDiff = ceilToNearest(
mouseMoveEvent.clientY - segmentPosition.top,
30
);
const daysDiff =
floorToNearest(
mouseMoveEvent.clientX - segmentPosition.left,
segmentPosition.width
) / segmentPosition.width;
const newEnd = addDays(addMinutes(segment.date, minutesDiff), daysDiff);
if (newEnd > segment.date && newEnd < endOfView) {
dragToSelectEvent.end = newEnd;
}
this.refresh();
});
