typescript - نوع 'string | undefined' قابل اختصاص به نوع 'string' نیست، هنگام استفاده از مقادیر .env


من دارم next-auth را در برنامه nextjs-13 خود پیادهسازی میکنم، اما وقتی تلاش کردم از متغیرهای .env در [...nextauth]/route.ts استفاده کنم، خطا نشان داده شد:

نوع 'string | undefined' قابل اختصاص به نوع 'string' نیست.

جزئیات پروژه

نام بستهنسخه بسته
Next JS (با مسیر app و دایرکتوری src/)13.4.4
تایپ اسکریپت5.1.3
بعد-احراز هویت4.22.1

فایل .env

GOOGLE_CLIENT_ID=my-Client-Id
GOOGLE_CLIENT_SECRET=my-Client-Secret

پاسخ شماره ۱

گزینه ۱: قالبگیری

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

GoogleProvider({
  clientId: process.env.GOOGLE_CLIENT_ID as string,
  clientSecret: process.env.GOOGLE_CLIENT_SECRET as string,
})

گزینه ۲: محدود کردن نوع

شما میتوانید مطمئن شوید که متغیرهای محیطی شما قبل از دسترسی تعریف شدهاند. هرچند این میتواند بسیار تکراری شود. اکنون تایپاسکریپت میداند که در این بلوک کد مقدار آنها undefined نیست. با این حال، شما تقریباً همان مشکل گزینه ۱ را دارید.

if (
  process.env.GOOGLE_CLIENT_ID === undefined ||
  process.env.GOOGLE_CLIENT_SECRET == undefined
) {
  throw new Error('Invalid env vars');
}

گزینه ۳: متغیرهای محیطی نوعدار

به نظر من این بهترین گزینه است. من میتوانم بسته t3-env را به شدت توصیه کنم. سپس شما به متغیرهای محیطی ایمن از نظر نوع دسترسی خواهید داشت.