جاوااسکریپت - فیلتر کردن مقادیر غیر تهی از آرایه در تایپاسکریپت
من این کد را دارم:
let x1: (number | null)[] = [null, 1, 2, 3, null];
let x2: number[] = x1.filter( o => o !== null );
من در تلاش هستم تا مقادیر غیرتهی را با استفاده از filter فیلتر کنم. VS code این خطا را به من میدهد
نوع '(number | null)[]' قابل اختصاص به نوع 'number[]' نیست. نوع 'number | null' قابل اختصاص به نوع 'number' نیست. نوع 'null' قابل اختصاص به نوع 'number' نیست. ts(2322)
پیشاپیش سپاسگزارم.
پاسخ شماره ۱
متد filter() برای آرایهها تنها زمانی محدود میشود که کالبکی که به آن میدهید تابعی باشد که یک پیشبینه نوع (به شکل arg is Type) برمیگرداند. در TypeScript 5.4 و نسخههای پایینتر شما نیاز دارید که نوع بازگشتی را بهصورت دستی حاشیهنویسی کنید:
// TS5.4 and below
let x1: (number | null)[] = [null, 1, 2, 3, null];
let x2: number[] = x1.filter((o): o is number => o !== null); // okay
اما از TypeScript 5.5 به بعد، گزارههای نوع از پیادهسازی تابع استنتاج میشوند، همانطور که در microsoft/TypeScript#57465 پیادهسازی شده است، به این معنی که کد شما ناگهان بدون تغییر شروع به کار خواهد کرد:
// TS5.5 and above
let x1: (number | null)[] = [null, 1, 2, 3, null];
let x2: number[] = x1.filter(o => o !== null); // okay
لینک زمین بازی به کد
