TypeScript
يأتي Next.js مع دعم مدمج لـ TypeScript، حيث يقوم تلقائيًا بتثبيت الحزم الضرورية وضبط الإعدادات المناسبة عند إنشاء مشروع جديد باستخدام create-next-app.
لإضافة TypeScript إلى مشروع موجود، قم بإعادة تسمية ملف إلى .ts / .tsx. ثم قم بتشغيل next dev و next build لتثبيت التبعيات الضرورية تلقائيًا وإضافة ملف tsconfig.json مع خيارات التهيئة الموصى بها.
معلومة مفيدة: إذا كان لديك بالفعل ملف
jsconfig.json، انسخ خيارpathsمن الملف القديمjsconfig.jsonإلى ملفtsconfig.jsonالجديد، ثم احذف الملف القديمjsconfig.json.
أمثلة
التحقق من أنواع next.config.ts
يمكنك استخدام TypeScript واستيراد الأنواع في تكوين Next.js الخاص بك باستخدام next.config.ts.
import type { NextConfig } from 'next'
const nextConfig: NextConfig = {
/* خيارات التهيئة هنا */
}
export default nextConfigمعلومة مفيدة: دقة الوحدات في
next.config.tsمحدودة حاليًا بـCommonJS. قد يتسبب هذا في عدم توافق مع الحزم التي تعمل فقط بـ ESM عند تحميلها فيnext.config.ts.
عند استخدام ملف next.config.js، يمكنك إضافة بعض التحقق من الأنواع في بيئة التطوير الخاصة بك باستخدام JSDoc كما يلي:
// @ts-check
/** @type {import('next').NextConfig} */
const nextConfig = {
/* خيارات التهيئة هنا */
}
module.exports = nextConfigالتوليد الثابت وعرض جانب الخادم
لـ getStaticProps، و getStaticPaths، و getServerSideProps، يمكنك استخدام الأنواع GetStaticProps، و GetStaticPaths، و GetServerSideProps على التوالي:
import type { GetStaticProps, GetStaticPaths, GetServerSideProps } from 'next'
export const getStaticProps = (async (context) => {
// ...
}) satisfies GetStaticProps
export const getStaticPaths = (async () => {
// ...
}) satisfies GetStaticPaths
export const getServerSideProps = (async (context) => {
// ...
}) satisfies GetServerSidePropsمعلومة مفيدة: تمت إضافة
satisfiesإلى TypeScript في الإصدار 4.9. نوصي بالترقية إلى أحدث إصدار من TypeScript.
مع مسارات API
فيما يلي مثال لكيفية استخدام الأنواع المدمجة لمسارات API:
import type { NextApiRequest, NextApiResponse } from 'next'
export default function handler(req: NextApiRequest, res: NextApiResponse) {
res.status(200).json({ name: 'John Doe' })
}يمكنك أيضًا كتابة بيانات الاستجابة:
import type { NextApiRequest, NextApiResponse } from 'next'
type Data = {
name: string
}
export default function handler(
req: NextApiRequest,
res: NextApiResponse<Data>
) {
res.status(200).json({ name: 'John Doe' })
}مع App مخصص
إذا كان لديك تطبيق مخصص App، يمكنك استخدام النوع المدمج AppProps وتغيير اسم الملف إلى ./pages/_app.tsx كما يلي:
import type { AppProps } from 'next/app'
export default function MyApp({ Component, pageProps }: AppProps) {
return <Component {...pageProps} />
}التحقق التدريجي من الأنواع
منذ الإصدار v10.2.1 يدعم Next.js التحقق التدريجي من الأنواع عند تمكينه في ملف tsconfig.json الخاص بك، وهذا يمكن أن يساعد في تسريع التحقق من الأنواع في التطبيقات الكبيرة.
تعطيل أخطاء TypeScript في الإنتاج
يفشل Next.js في بناء الإنتاج (next build) عند وجود أخطاء TypeScript في مشروعك.
إذا كنت ترغب في أن يقوم Next.js بإنتاج كود الإنتاج بشكل خطير حتى عند وجود أخطاء في تطبيقك، يمكنك تعطيل خطوة التحقق من الأنواع المدمجة.
إذا تم التعطيل، تأكد من أنك تقوم بإجراء عمليات التحقق من الأنواع كجزء من عملية البناء أو النشر، وإلا فقد يكون هذا خطيرًا جدًا.
افتح next.config.ts وقم بتمكين خيار ignoreBuildErrors في تكوين typescript:
import type { NextConfig } from 'next'
const nextConfig: NextConfig = {
typescript: {
// !! تحذير !!
// السماح بشكل خطير بإكمال بناء الإنتاج بنجاح حتى إذا
// كان مشروعك يحتوي على أخطاء أنواع.
// !! تحذير !!
ignoreBuildErrors: true,
},
}
export default nextConfigمعلومة مفيدة: يمكنك تشغيل
tsc --noEmitللتحقق من أخطاء TypeScript بنفسك قبل البناء. هذا مفيد لخطوط أنابيب CI/CD حيث ترغب في التحقق من أخطاء TypeScript قبل النشر.
تعريفات الأنواع المخصصة
عندما تحتاج إلى تعريف أنواع مخصصة، قد تميل إلى تعديل next-env.d.ts. ومع ذلك، يتم إنشاء هذا الملف تلقائيًا، لذا فإن أي تغييرات تقوم بها ستتم الكتابة فوقها. بدلاً من ذلك، يجب عليك إنشاء ملف جديد، لنسميه new-types.d.ts، والإشارة إليه في tsconfig.json الخاص بك:
{
"compilerOptions": {
"skipLibCheck": true
//...مختصر...
},
"include": [
"new-types.d.ts",
"next-env.d.ts",
".next/types/**/*.ts",
"**/*.ts",
"**/*.tsx"
],
"exclude": ["node_modules"]
}تغييرات الإصدارات
| الإصدار | التغييرات |
|---|---|
v15.0.0 | تمت إضافة دعم next.config.ts لمشاريع TypeScript. |
v13.2.0 | أصبحت الروابط المكتوبة بشكل ثابت متاحة في النسخة التجريبية. |
v12.0.0 | يتم الآن استخدام SWC افتراضيًا لتحويل TypeScript و TSX لعمليات بناء أسرع. |
v10.2.1 | تمت إضافة دعم التحقق التدريجي من الأنواع عند تمكينه في ملف tsconfig.json. |