الفرق بين المراجعتين لصفحة: «Next.js/typescript»

من موسوعة حسوب
لا ملخص تعديل
لا ملخص تعديل
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:استخدام TypeScript في Next.js}}</noinclude>
<noinclude>{{DISPLAYTITLE:استخدام TypeScript في Next.js}}</noinclude>
تزوّدك Next.js بكل ما يلزم للعمل مع [[TypeScript]] بما في ذلك تثبيتها دون الحاجة إلى تهيئة وتقديم أنواع مدمجة لاستخدامها في صفحاتك والواجهة البرمجية وغيرها الكثير.
تزوّدك Next.js بكل ما يلزم للعمل مع [[TypeScript]] بما في ذلك تثبيتها دون الحاجة إلى تهيئة، وتقديم أنواع مدمجة لاستخدامها في صفحاتك وفي الواجهة البرمجية وغيرها الكثير.
{| class="wikitable"
{| class="wikitable"
|+
|+
سطر 14: سطر 14:


== استخدام create-next-app لإنشاء تطبيقات TypeScript في Next.js ==
== استخدام create-next-app لإنشاء تطبيقات TypeScript في Next.js ==
بإمكانك إنشاء تطبيق TypeScriptمن خلال [[Next.js/create next app|<code>create-next-app</code>]] مستخدمًا الرايتين <code>ts, --typescript--</code>:<syntaxhighlight lang="bash">
بإمكانك إنشاء تطبيق TypeScript من خلال [[Next.js/create next app|<code>create-next-app</code>]] مستخدمًا الرايتين <code>ts, --typescript--</code>:<syntaxhighlight lang="bash">
npx create-next-app@latest --ts
npx create-next-app@latest --ts
# أو
# أو
سطر 25: سطر 25:
للعمل على مشاريع موجودة، عليك أولًا إنشاء الملف <code>tsconfig.json</code> في المجلد الجذري للمشروع:<syntaxhighlight lang="bash">
للعمل على مشاريع موجودة، عليك أولًا إنشاء الملف <code>tsconfig.json</code> في المجلد الجذري للمشروع:<syntaxhighlight lang="bash">
touch tsconfig.json
touch tsconfig.json
</syntaxhighlight>تهيئ Next.js هذا الملف بالقيم الافتراضية، وبإمكانك أيضّا تزويد هذا الملف [https://www.typescriptlang.org/docs/handbook/compiler-options.htm بخيارات التصريف] التي تناسبك. كما تستطيع استخدام مسار نسبي إلى الملف <code>tsconfig.json</code> بضبط قيمة الخاصية <code>typescript.tsconfigPath</code> ضمن ملف التهيئة <code>next.config.js</code>.
</syntaxhighlight>تهيئ Next.js هذا الملف بالقيم الافتراضية، وبإمكانك أيضّا تزويد هذا الملف [https://www.typescriptlang.org/docs/handbook/compiler-options.htm بخيارات التصريف] التي تناسبك. كما تستطيع استخدام مسار نسبي إلى الملف <code>tsconfig.json</code> بإسناد قيمة مناسبة للخاصية <code>typescript.tsconfigPath</code> ضمن ملف التهيئة <code>next.config.js</code>. تستخدم Next.js ابتداءً من النسخة <code>v12.0.0</code> المصرِّف [[Next.js/compiler|SWC]] افتراضيًا في تصريف TypeScript و TSX لبناء التطبيق بشكل أسرع.<blockquote>'''ملاحظة''': تستخدم Next.js إضافة Babel للتعامل مع TypeScript إن وجد الملف <code>babelrc.</code>، لكن هناك بعض التحفظات وبعض [https://babeljs.io/docs/en/babel-plugin-transform-typescript#typescript-compiler-options خيارات التصريف التي تعالج بشكل مختلف]. </blockquote>نفِّذ بعد ذلك أحد الأمرين (<code>npm run dev</code>أو <code>yarn dev</code>) وستقودك Next.js خلال عملية تثبيت الحزم المطلوبة:<syntaxhighlight lang="bash">
 
تستخدم Next.js ابتداءً من النسخة <code>v12.0.0</code> المصرِّف [[Next.js/compiler|SWC]] افتراضيًا في تصريف TypeScript و TSX لبناء التطبيق بشكل أسرع.<blockquote>تستخدم Next.js إضافة Babel للتعامل مع TypeScript إن وجد الملف <code>babelrc.</code>، لكن هناك بعض التحفظات وبعض [https://babeljs.io/docs/en/babel-plugin-transform-typescript#typescript-compiler-options خيارات التصريف التي تعالج بشكل مختلف]. </blockquote>نفِّذ بعد ذلك أحد الأمرين (<code>npm run dev</code>أو <code>yarn dev</code>) وستقودك خلال عملية تثبيت الحزم المطلوبة:<syntaxhighlight lang="bash">
npm run dev
npm run dev


سطر 37: سطر 35:
#
#
# ...
# ...
</syntaxhighlight>ستصبح بعد ذلك قادرًا على تحويل ملفات <code>js.</code> إلى ملفات <code>tsx.</code> وتستفيد من غمكانات TypeScript.
</syntaxhighlight>ستصبح بعد ذلك قادرًا على تحويل ملفات <code>js.</code> إلى ملفات <code>tsx.</code> وتستفيد من إمكانات TypeScript.


'''ملاحظة''': سيظهر ملف باسم <code>next-env.d.ts</code> في المجلد الجذري للمشروع، ومهمته التأكد أن أنواع Next.js قد اختارها مُصرِّف TypeScript. لا يمكن إزالة هذا الملف أو تعديله لأنه قد يتغير مع الوقت.
'''ملاحظة''': سيظهر ملف باسم <code>next-env.d.ts</code> في المجلد الجذري للمشروع، ومهمته التأكد أن أنواع Next.js قد اختارها مُصرِّف TypeScript. لا يمكن إزالة هذا الملف أو تعديله لأنه قد يتغير مع الوقت.


'''ملاحظة''': إن النمط <code>strict</code> (المقيّد) للغة TypeScript معطّل تلقائيًا، لكننا ننصحك بتفعيله حالما تشعر بأنك تمكّنت من اللغة من خلال الملف <code>tsconfig.json</code>.
'''ملاحظة''': إن النمط <code>strict</code> (المقيّد) للغة TypeScript معطّل تلقائيًا، لكننا ننصحك بتفعيله من خلال الملف <code>tsconfig.json</code> حالما تشعر بأنك تمكّنت من اللغة.


'''ملاحظة''': يمكنك إضافة أنواع أخرى لمشروعك من خلال إضافة ملفات جديدة مثل <code>additional.d.ts</code> بدلًا من تعديل الملف<code>next-env.d.ts</code>. عليك بعد ذلك أن تشير إليها ضمن المصفوفة <code>include</code> في ملف التهيئة <code>tsconfig.json</code>.
'''ملاحظة''': يمكنك إضافة أنواع أخرى لمشروعك من خلال إضافة ملفات جديدة مثل <code>additional.d.ts</code> بدلًا من تعديل الملف <code>next-env.d.ts</code>. عليك بعد ذلك أن تشير إليها ضمن المصفوفة <code>include</code> في ملف التهيئة <code>tsconfig.json</code>.


تتحقق Next.js من الأنواع تلقائيًا عند تنفذ أمر البناء <code>next build</code>، لكننا ننصحك بالتحقق منها عبر محرر الشيفرة خلال التطوير.
'''ملاحظة''': تتحقق Next.js من الأنواع تلقائيًا عند تنفذ أمر البناء <code>next build</code>، لكننا ننصحك بالتحقق منها عبر محرر الشيفرة أثناء تطوير التطبيق.


'''ملاحظة''': إن أردت إيقاف تقارير الأخطاء عد إلى توثيق Next.js المتعلق بتجاهل أخطاء [[Next.js/next.config.js|TypeScript]].
'''ملاحظة''': إن أردت إيقاف تقارير الأخطاء، عد إلى توثيق Next.js المتعلق بتجاهل أخطاء [[Next.js/next.config.js|TypeScript]].


== التوليد الساكن والتصيير من جانب الخادم في مشاريع TypeScriptمع Next.js ==
== التوليد الساكن والتصيير من جانب الخادم في مشاريع TypeScript مع Next.js ==


* يُستخدم النوع <code>GetStaticProps</code> للدالة <code>getStaticProps</code>.
* يُستخدم النوع <code>GetStaticProps</code> للدالة <code>getStaticProps</code>.
سطر 68: سطر 66:
   // ...
   // ...
}
}
</syntaxhighlight><blockquote>إن كنت تستخدم الدالة <code>getInitialProps</code> فاتّبع الإرشادات الموجودة في [[Next.js/api data fetching|توثيق إحضار البيانات]]</blockquote>
</syntaxhighlight><blockquote>'''ملاحظة:''' إن كنت تستخدم الدالة <code>getInitialProps</code> فاتّبع الإرشادات الموجودة في [[Next.js/api data fetching|توثيق إحضار البيانات]]</blockquote>


== توجيهات الواجهة البرمجية بوجود أنواع في Next.js ==
== توجيهات الواجهة البرمجية بوجود الأنواع في Next.js ==
إليك مثالًا عن كيفية استخدام الأنواع المدمجة مع توجيهات الواجهة البرمجية:<syntaxhighlight lang="javascript">
إليك مثالًا عن كيفية استخدام الأنواع المدمجة مع توجيهات الواجهة البرمجية:<syntaxhighlight lang="javascript">
import type { NextApiRequest, NextApiResponse } from 'next'
import type { NextApiRequest, NextApiResponse } from 'next'
سطر 89: سطر 87:


== المسارت البديلة والعنوان الجذري في تهيئة TypeScript ==
== المسارت البديلة والعنوان الجذري في تهيئة TypeScript ==
تدعم Next.js تلقائيًا الخياران <code>"paths"</code> و <code>"baseUrl"</code> في ملف <code>tsconfig.json</code>. لمعلومات أكثر راجع صفحة توثيق [[Next.js/module path aliases|وحدة المسارات البديلة]]
تدعم Next.js تلقائيًا الخياران <code>"paths"</code> و <code>"baseUrl"</code> في ملف <code>tsconfig.json</code>. لمعلومات أكثر راجع صفحة توثيق [[Next.js/module path aliases|وحدة المسارات البديلة]].


== التحقق من الأنواع في الملف next.config.js ==
== التحقق من الأنواع في الملف next.config.js ==
ينبغي أن يكون الملف <code>next.config.js</code> ملف JavaScript لا يحلل من قبل Babel أو TypeScript، لكن بإمكانك إضافة طريقة للتحقق من الأنواع في بيئة عملك باستخدام JSDoc كالتالي:<syntaxhighlight lang="javascript">
ينبغي أن يكون الملف <code>next.config.js</code> ملف JavaScript، ولا يمكن تحليله من قبل Babel أو TypeScript، لكن بإمكانك إضافة طريقة للتحقق من الأنواع في بيئة عملك باستخدام JSDoc كالتالي:<syntaxhighlight lang="javascript">
// @ts-check
// @ts-check


سطر 109: سطر 107:


== تجاهل أخطاء TypeScript في Next.js ==
== تجاهل أخطاء TypeScript في Next.js ==
توقف Next.js بناء نسخة الإنتاج من التطبيق (<code>next build</code>) عند وجود أخطاء في المشروع. لكن إن أردت المخاطرة في بناء تطبيق في مرحلة الإنتاج يحتوي على أخطاء، بإمكانك تعطيل خطوة التحقق من الأنواع. إن فعلت ذلك، تحقق من الأنواع خلال مرحلة البناء والتوزيع وإلا سيكون تطبيقك محفوفًا بالمخاطر.
تُوقِف Next.js بناء نسخة الإنتاج من التطبيق (<code>next build</code>) عند وجود أخطاء في المشروع. لكن إن أردت المخاطرة في بناء تطبيق في مرحلة الإنتاج يحتوي على أخطاء، بإمكانك تعطيل خطوة التحقق من الأنواع. إن فعلت ذلك، تحقق من الأنواع خلال مرحلة البناء والتوزيع وإلا سيكون تطبيقك محفوفًا بالمخاطر.


افتح الملف <code>next.config.js</code> وفعّل الخيار <code>ignoreBuildErrors</code> في تعليمات تهيئة <code>typescript</code>:<syntaxhighlight lang="javascript">
افتح الملف <code>next.config.js</code> وفعّل الخيار <code>ignoreBuildErrors</code> في تعليمات تهيئة <code>typescript</code>:<syntaxhighlight lang="javascript">

مراجعة 14:19، 30 مايو 2022

تزوّدك Next.js بكل ما يلزم للعمل مع TypeScript بما في ذلك تثبيتها دون الحاجة إلى تهيئة، وتقديم أنواع مدمجة لاستخدامها في صفحاتك وفي الواجهة البرمجية وغيرها الكثير.

نسخة Next.js التغييرات التي تتعلق بدعم TypeScript
v12.0.0 تستخدم SWC افتراضيًا في تصريف TypeScript و TSX لبناء التطبيق بشكل أسرع.
v10.2.1 تدعم Next.js استخدام ميزة التحقق التدريجي من النوع Incremental type checking عندما تمكينها في الملف tsconfig.json.

استخدام create-next-app لإنشاء تطبيقات TypeScript في Next.js

بإمكانك إنشاء تطبيق TypeScript من خلال create-next-app مستخدمًا الرايتين ts, --typescript--:

npx create-next-app@latest --ts
# أو
yarn create next-app --typescript
# أو
pnpm create next-app -- --ts

العمل على مشاريع TypeScript موجودة في Next.js

للعمل على مشاريع موجودة، عليك أولًا إنشاء الملف tsconfig.json في المجلد الجذري للمشروع:

touch tsconfig.json

تهيئ Next.js هذا الملف بالقيم الافتراضية، وبإمكانك أيضّا تزويد هذا الملف بخيارات التصريف التي تناسبك. كما تستطيع استخدام مسار نسبي إلى الملف tsconfig.json بإسناد قيمة مناسبة للخاصية typescript.tsconfigPath ضمن ملف التهيئة next.config.js. تستخدم Next.js ابتداءً من النسخة v12.0.0 المصرِّف SWC افتراضيًا في تصريف TypeScript و TSX لبناء التطبيق بشكل أسرع.

ملاحظة: تستخدم Next.js إضافة Babel للتعامل مع TypeScript إن وجد الملف babelrc.، لكن هناك بعض التحفظات وبعض خيارات التصريف التي تعالج بشكل مختلف.

نفِّذ بعد ذلك أحد الأمرين (npm run devأو yarn dev) وستقودك Next.js خلال عملية تثبيت الحزم المطلوبة:

npm run dev

# سترى إرشادات كالتالي
#
# Please install TypeScript, @types/react, and @types/node by running:
#
#         yarn add --dev typescript @types/react @types/node
#
# ...

ستصبح بعد ذلك قادرًا على تحويل ملفات js. إلى ملفات tsx. وتستفيد من إمكانات TypeScript.

ملاحظة: سيظهر ملف باسم next-env.d.ts في المجلد الجذري للمشروع، ومهمته التأكد أن أنواع Next.js قد اختارها مُصرِّف TypeScript. لا يمكن إزالة هذا الملف أو تعديله لأنه قد يتغير مع الوقت.

ملاحظة: إن النمط strict (المقيّد) للغة TypeScript معطّل تلقائيًا، لكننا ننصحك بتفعيله من خلال الملف tsconfig.json حالما تشعر بأنك تمكّنت من اللغة.

ملاحظة: يمكنك إضافة أنواع أخرى لمشروعك من خلال إضافة ملفات جديدة مثل additional.d.ts بدلًا من تعديل الملف next-env.d.ts. عليك بعد ذلك أن تشير إليها ضمن المصفوفة include في ملف التهيئة tsconfig.json.

ملاحظة: تتحقق Next.js من الأنواع تلقائيًا عند تنفذ أمر البناء next build، لكننا ننصحك بالتحقق منها عبر محرر الشيفرة أثناء تطوير التطبيق.

ملاحظة: إن أردت إيقاف تقارير الأخطاء، عد إلى توثيق Next.js المتعلق بتجاهل أخطاء TypeScript.

التوليد الساكن والتصيير من جانب الخادم في مشاريع TypeScript مع Next.js

  • يُستخدم النوع GetStaticProps للدالة getStaticProps.
  • يُستخدم النوع GetStaticPaths للدالة getStaticPaths.
  • يُستخدم النوع GetServerSideProps للدالة getServerSideProps.
import { GetStaticProps, GetStaticPaths, GetServerSideProps } from 'next'

export const getStaticProps: GetStaticProps = async (context) => {
  // ...
}

export const getStaticPaths: GetStaticPaths = async () => {
  // ...
}

export const getServerSideProps: GetServerSideProps = async (context) => {
  // ...
}

ملاحظة: إن كنت تستخدم الدالة getInitialProps فاتّبع الإرشادات الموجودة في توثيق إحضار البيانات

توجيهات الواجهة البرمجية بوجود الأنواع في Next.js

إليك مثالًا عن كيفية استخدام الأنواع المدمجة مع توجيهات الواجهة البرمجية:

import type { NextApiRequest, NextApiResponse } from 'next'

export default (req: NextApiRequest, res: NextApiResponse) => {
  res.status(200).json({ name: 'John Doe' })
}

استخدام الأنواع مع التطبيقات المخصصة في Next.js

إن كان لديك تطبيق مخصص custom app، بإمكانك استخدام النوع المدمج AppProps وتغير اسم التطبيق إلى pages/_app.tsx/. كالتالي:

import type { AppProps } from 'next/app'

export default function MyApp({ Component, pageProps }: AppProps) {
  return <Component {...pageProps} />
}

المسارت البديلة والعنوان الجذري في تهيئة TypeScript

تدعم Next.js تلقائيًا الخياران "paths" و "baseUrl" في ملف tsconfig.json. لمعلومات أكثر راجع صفحة توثيق وحدة المسارات البديلة.

التحقق من الأنواع في الملف next.config.js

ينبغي أن يكون الملف next.config.js ملف JavaScript، ولا يمكن تحليله من قبل Babel أو TypeScript، لكن بإمكانك إضافة طريقة للتحقق من الأنواع في بيئة عملك باستخدام JSDoc كالتالي:

// @ts-check

/**
 * @type {import('next').NextConfig}
 **/
const nextConfig = {
  /* خيارات التهيئة هنا */
}

module.exports = nextConfig

التحقق التدريجي من الأنواع في Next.js

تدعم Next.js استخدام ميزة التحقق التدريجي من النوع Incremental type checking عندما تمكينها في الملف tsconfig.json ابتداءً من النسخة 10.2.1. يسرِّع ذلك التحقق من الأنواع في التطبيقات الضخمة، ولا بد من أن تكون نسخة TypeScript هي 4.3.2 أو أعلى لتختبر الأداء الأفضل لهذه الميزة.

تجاهل أخطاء TypeScript في Next.js

تُوقِف Next.js بناء نسخة الإنتاج من التطبيق (next build) عند وجود أخطاء في المشروع. لكن إن أردت المخاطرة في بناء تطبيق في مرحلة الإنتاج يحتوي على أخطاء، بإمكانك تعطيل خطوة التحقق من الأنواع. إن فعلت ذلك، تحقق من الأنواع خلال مرحلة البناء والتوزيع وإلا سيكون تطبيقك محفوفًا بالمخاطر.

افتح الملف next.config.js وفعّل الخيار ignoreBuildErrors في تعليمات تهيئة typescript:

module.exports = {
  typescript: {
    // !! تحذير !!
    // من الخطير السماح ببناء نسخة إنتاج تحتوي على أخطاء في النوع
    // !! تحذير !!
    ignoreBuildErrors: true,
  },
}

المصادر

  • الصفحة TypeScipt من توثيق Next.js الرسمي.