نیاز به یک مورد خاص در آرایه TypeScript


چگونه میتوانم یک نیاز برای یک آیتم خاص در یک آرایه typescript بنویسم؟ بیایید به عنوان مثال «آرایهای از اعداد با حداقل یک عدد هفت» را در نظر بگیریم. به نظر میرسد که داشتن شرط برای اینکه یک عنصر خاص هفت باشد آسان است، اما داشتن شرط برای «یکی از عناصر» دشوارتر است.

من موارد زیر را امتحان کردم. با این حال، این خطا را تولید میکند: Type alias 'ContainsSeven' خودش را به صورت حلقوی ارجاع میدهد. ts(2456).

type ContainsSeven =
  |[7, ...Array<number>]
  |[number, ...ContainsSeven]

const example1: ContainsSeven = [1,2,7]
const example2: ContainsSeven = [1,7,2]
const example3: ContainsSeven = [7,1,2]
    
// @ts-expect-error
const counter1: ContainsSeven = []
// @ts-expect-error
const counter2: ContainsSeven = [1,2,3]

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

پاسخ شماره ۱

این قابل انجام است اما با کمک تابع:

type IsValid<T extends number[]> = 7 extends T[number] ? T : never

const withSeven = <T extends number, List extends T[]>(list: IsValid<[...List]>) => list

withSeven([1, 2, 3, 4, 5, 7]) // ok

withSeven([1, 2, 3, 4, 5]) // error

IsValid بررسی میکند که آیا یکی از عناصر آرایه برابر با 7 است. اگر برابر با 7 بود - آرایه را برمیگرداند، در غیر این صورت - never را برمیگرداند.

اطلاعات بیشتری درباره اعتبارسنجی نوع میتوانید در اینجا و اینجا در من پیدا کنید

در رابطه با ارجاعهای دایرهای، من مایلم شرط ببندم که این سؤال/پاسخ مربوط به مشکل شما باشد