الفرق بين المراجعتين لصفحة: «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" | ||
!نسخة Next.js | |||
!نسخة Next.js | |||
!التغييرات التي تتعلق بدعم TypeScript | !التغييرات التي تتعلق بدعم TypeScript | ||
|- | |- | ||
سطر 13: | سطر 14: | ||
|} | |} | ||
== استخدام create-next-app | == استخدام create-next-app لاعتماد لغة TypeScript مع تطبيق Next.js == | ||
بإمكانك إنشاء تطبيق | بإمكانك إنشاء تطبيق بلغة [[TypeScript]] من خلال سكربت [[Next.js/create next app|<code>create-next-app</code>]] مستخدمًا الراية <code>ts--</code> أو الراية <code>typescript--</code> كما يلي:<syntaxhighlight lang="bash"> | ||
npx create-next-app@latest --ts | npx create-next-app@latest --ts | ||
# أو | # أو | ||
سطر 22: | سطر 23: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == دعم لغة TypeScript مع مشاريع موجودة == | ||
لتوفير دعم لغة TypeScript على مشاريع موجودة مسبقًا، عليك أولًا إنشاء الملف <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> | </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 ابتداءً من النسخة | تستخدم Next.js ابتداءً من النسخة v12.0.0 المصرِّف [[Next.js/compiler|SWC]] افتراضيًا في تصريف TypeScript وملفات tsx لبناء التطبيق بشكل أسرع.<blockquote>'''ملاحظة''': تستخدم Next.js إضافة Babel للتعامل مع TypeScript إن وجد الملف <code>babelrc.</code>، لكن هناك بعض [https://babeljs.io/docs/en/babel-plugin-transform-typescript#caveats المحاذير] وبعض [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"> | ||
npm run dev | npm run dev | ||
سطر 37: | سطر 38: | ||
# | # | ||
# ... | # ... | ||
</syntaxhighlight>ستصبح بعد ذلك قادرًا على تحويل ملفات | </syntaxhighlight>ستصبح بعد ذلك قادرًا على تحويل ملفات <code>js.</code> إلى ملفات <code>tsx.</code> وتستفيد من إمكانات لغة [[TypeScript]]. | ||
'''ملاحظة''': سيظهر ملف باسم | '''ملاحظة''': سيظهر ملف باسم <code>next-env.d.ts</code> في المجلد الجذري للمشروع، ومهمته التأكد أن أنواع Next.js قد اختارها مُصرِّف TypeScript. لا يمكن إزالة هذا الملف أو تعديله لأنه قد يتغير مع الوقت. | ||
'''ملاحظة''': إن النمط <code>strict</code> (المقيّد) للغة TypeScript معطّل تلقائيًا، لكننا ننصحك بتفعيله | '''ملاحظة''': إن النمط <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#.D8.AA.D8.AC.D8.A7.D9.87.D9.84 .D8.A3.D8.AE.D8.B7.D8.A7.D8.A1 TypeScript|بتجاهل أخطاء TypeScript]]. | |||
== التوليد الساكن والتصيير من جانب الخادم | == التوليد الساكن SSG والتصيير من جانب الخادم SSR == | ||
* يُستخدم النوع <code>GetStaticProps</code> للدالة <code>getStaticProps</code>. | * يُستخدم النوع <code>GetStaticProps</code> للدالة <code>getStaticProps</code>. | ||
سطر 68: | سطر 69: | ||
// ... | // ... | ||
} | } | ||
</syntaxhighlight><blockquote>إن كنت تستخدم الدالة <code>getInitialProps</code> فاتّبع الإرشادات الموجودة في [[Next.js/api data fetching|توثيق إحضار البيانات]]</blockquote> | </syntaxhighlight><blockquote>'''ملاحظة:''' إن كنت تستخدم الدالة <code>getInitialProps</code> فاتّبع الإرشادات الموجودة في [[Next.js/api data fetching#.D8.A7.D8.B3.D8.AA.D8.AE.D8.AF.D8.A7.D9.85 .D8.A7.D9.84.D8.AF.D8.A7.D9.84.D8.A9 .D9.85.D8.B9 TypeScript|توثيق إحضار البيانات]]</blockquote> | ||
== | == واجهة التوجيه API Routes == | ||
إليك مثالًا عن كيفية استخدام الأنواع المدمجة مع | إليك مثالًا عن كيفية استخدام الأنواع المدمجة مع واجهة التوجيه:<syntaxhighlight lang="typescript"> | ||
import type { NextApiRequest, NextApiResponse } from 'next' | import type { NextApiRequest, NextApiResponse } from 'next' | ||
export default (req: NextApiRequest, res: NextApiResponse) => { | export default (req: NextApiRequest, res: NextApiResponse) => { | ||
res.status(200).json({ name: 'John Doe' }) | |||
} | |||
</syntaxhighlight>يمكنك أيضًا تحديد نوع الرد:<syntaxhighlight lang="typescript"> | |||
import type { NextApiRequest, NextApiResponse } from 'next' | |||
type Data = { | |||
name: string | |||
} | |||
export default (req: NextApiRequest, res: NextApiResponse<Data>) => { | |||
res.status(200).json({ name: 'John Doe' }) | res.status(200).json({ name: 'John Doe' }) | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== استخدام الأنواع مع | == استخدام الأنواع مع مكون <code>APP</code> مخصص == | ||
إن كان لديك [[Next.js/custom app|تطبيق مخصص]] custom app، بإمكانك استخدام النوع المدمج <code>AppProps</code> وتغير اسم التطبيق إلى <code>pages/_app.tsx/.</code> كالتالي:<syntaxhighlight lang="javascript"> | إن كان لديك [[Next.js/custom app|تطبيق مخصص]] custom app، بإمكانك استخدام النوع المدمج <code>AppProps</code> وتغير اسم التطبيق إلى <code>pages/_app.tsx/.</code> كالتالي:<syntaxhighlight lang="javascript"> | ||
import type { AppProps } from 'next/app' | import type { AppProps } from 'next/app' | ||
سطر 88: | سطر 99: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== المسارت البديلة والعنوان الجذري | == المسارت البديلة والعنوان الجذري baseUrl == | ||
تدعم 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> ملف | ينبغي أن يكون الملف <code>next.config.js</code> ملف JavaScript، ولا يمكن تحليله من قبل Babel أو TypeScript، لكن بإمكانك إضافة طريقة للتحقق من الأنواع في بيئة عملك باستخدام صياغة JSDoc التعليقية كالتالي:<syntaxhighlight lang="javascript"> | ||
// @ts-check | // @ts-check | ||
سطر 105: | سطر 116: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== التحقق التدريجي من الأنواع | == التحقق التدريجي من الأنواع == | ||
تدعم Next.js استخدام ميزة التحقق التدريجي من النوع Incremental type checking عندما تمكينها في الملف <code>tsconfig.json</code> ابتداءً من النسخة 10.2.1 | تدعم Next.js استخدام ميزة التحقق التدريجي من النوع [[TypeScript/tsconfig.json|Incremental type checking]] عندما تمكينها في الملف <code>tsconfig.json</code> ابتداءً من النسخة 10.2.1 ويسرِّع ذلك التحقق من الأنواع في التطبيقات الضخمة، ولا بد من أن تكون نسخة TypeScript هي 4.3.2 أو أعلى لتختبر الأداء الأفضل لهذه الميزة. | ||
== تجاهل أخطاء TypeScript | == تجاهل أخطاء TypeScript == | ||
تُوقِف 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"> | ||
سطر 125: | سطر 136: | ||
* الصفحة [https://nextjs.org/docs/basic-features/typescript TypeScipt] من توثيق Next.js الرسمي. | * الصفحة [https://nextjs.org/docs/basic-features/typescript TypeScipt] من توثيق Next.js الرسمي. | ||
[[تصنيف:Next.js|{{SUBPAGENAME}}]] | |||
[[تصنيف:Next.js Basic Features|{{SUBPAGENAME}}]] |
المراجعة الحالية بتاريخ 17:19، 3 يناير 2023
تزوّدك 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 مع مشاريع موجودة
لتوفير دعم لغة TypeScript على مشاريع موجودة مسبقًا، عليك أولًا إنشاء الملف 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.
التوليد الساكن SSG والتصيير من جانب الخادم SSR
- يُستخدم النوع
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
فاتّبع الإرشادات الموجودة في توثيق إحضار البيانات
واجهة التوجيه API Routes
إليك مثالًا عن كيفية استخدام الأنواع المدمجة مع واجهة التوجيه:
import type { NextApiRequest, NextApiResponse } from 'next'
export default (req: NextApiRequest, res: NextApiResponse) => {
res.status(200).json({ name: 'John Doe' })
}
يمكنك أيضًا تحديد نوع الرد:
import type { NextApiRequest, NextApiResponse } from 'next'
type Data = {
name: string
}
export default (req: NextApiRequest, res: NextApiResponse<Data>) => {
res.status(200).json({ name: 'John Doe' })
}
استخدام الأنواع مع مكون APP
مخصص
إن كان لديك تطبيق مخصص custom app، بإمكانك استخدام النوع المدمج AppProps
وتغير اسم التطبيق إلى pages/_app.tsx/.
كالتالي:
import type { AppProps } from 'next/app'
export default function MyApp({ Component, pageProps }: AppProps) {
return <Component {...pageProps} />
}
المسارت البديلة والعنوان الجذري baseUrl
تدعم 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 استخدام ميزة التحقق التدريجي من النوع Incremental type checking عندما تمكينها في الملف tsconfig.json
ابتداءً من النسخة 10.2.1 ويسرِّع ذلك التحقق من الأنواع في التطبيقات الضخمة، ولا بد من أن تكون نسخة TypeScript هي 4.3.2 أو أعلى لتختبر الأداء الأفضل لهذه الميزة.
تجاهل أخطاء TypeScript
تُوقِف Next.js بناء نسخة الإنتاج من التطبيق next build
عند وجود أخطاء في المشروع. لكن إن أردت المخاطرة في بناء تطبيق في مرحلة الإنتاج يحتوي على أخطاء، بإمكانك تعطيل خطوة التحقق من الأنواع. إن فعلت ذلك، تحقق من الأنواع خلال مرحلة البناء والتوزيع وإلا سيكون تطبيقك محفوفًا بالمخاطر.
افتح الملف next.config.js
وفعّل الخيار ignoreBuildErrors
في تعليمات تهيئة typescript
:
module.exports = {
typescript: {
// !! تحذير !!
// من الخطير السماح ببناء نسخة إنتاج تحتوي على أخطاء في النوع
// !! تحذير !!
ignoreBuildErrors: true,
},
}
المصادر
- الصفحة TypeScipt من توثيق Next.js الرسمي.