نوع محافظها - تایپاسکریپت: محافظ نوع برای نوع سفارشی
هدف: تلاش برای ایجاد یک نگهبان نوع برای یک نوع سفارشی.
در اینجا نوع سفارشی من است:
type AppProviders = 'box' | 'dropbox' | 'google';
این اولین تلاش من در ایجاد گارد نوع است، اما به نظر میرسد دوباره اعلام کردن مقادیر مجاز تکراری است:
type AppProviders = 'box' | 'dropbox' | 'google';
const appProviders: AppProviders[] = [ 'box', 'dropbox', 'google' ];
function isAppProviders(provider): provider is AppProviders {
return appProviders.includes(provider)
}
آیا راه بهتری برای انجام محافظ نوع برای نوعهای لغتی سفارشی وجود دارد؟
متشکرم
پاسخ شماره ۱
دلیلی که شما آن خطا را دریافت میکنید این است که:
https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-aliases
نوع Easing="ease-in" | "ease-out" | "ease-in-out";
نوعهای رشتهای ثابت به شما اجازه میدهند که مقدار دقیق که یک رشته باید داشته باشد را مشخص کنید. در عمل، نوعهای رشتهای ثابت به خوبی با نوعهای اتحادی، محافظهای نوع و نامهای مستعار نوع ترکیب میشوند. شما میتوانید از این ویژگیها با هم استفاده کنید تا رفتاری شبیه enum با رشتهها داشته باشید.
من مجبور شدم این را جستجو کنم.... مثالی که پیدا کردم این بود https://www.damirscorner.com/blog/posts/20200619-StringLiteralTypeGuardInTypescript.html
export const APP_PROVIDERS = ['a', 'b'] as const;
export type AppProviders = typeof APP_PROVIDERS[number];
export function isAppProviders(unknownString: string): unknownString is AppProviders {
return (APP_PROVIDERS as unknown as string[]).includes(unknownString);
}
