שלטו בתצורת TypeScript עם מדריך מעמיק זה ל-tsconfig.json. למדו אפשרויות קומפיילר חיוניות, הגדרת פרויקט, ותצורות מתקדמות לפיתוח יעיל.
תצורת TypeScript: מדריך מקיף לקובץ tsconfig.json
TypeScript, הרחבת-על של JavaScript, מביאה טיפוסיות סטטית לעולם הדינמי של פיתוח ווב. קובץ tsconfig.json
מוגדר היטב הוא חיוני לניצול מלוא העוצמה של TypeScript. מדריך זה מספק סקירה מקיפה של tsconfig.json
, המכסה אפשרויות קומפיילר חיוניות, הגדרת פרויקט ותצורות מתקדמות.
מהו tsconfig.json?
הקובץ tsconfig.json
הוא קובץ תצורה המגדיר את אפשרויות הקומפיילר עבור פרויקט TypeScript. הוא מנחה את הקומפיילר של TypeScript כיצד להפוך קוד TypeScript לקוד JavaScript. קובץ זה חיוני להגדרת מבנה הפרויקט, קביעת כללי קומפילציה, והבטחת עקביות בצוות הפיתוח, בין אם הצוות ממוקם במשרד אחד או מפוזר על פני יבשות מרובות.
יצירת קובץ tsconfig.json
כדי ליצור קובץ tsconfig.json
, נווטו לספריית השורש של הפרויקט בטרמינל והריצו את הפקודה הבאה:
tsc --init
פקודה זו יוצרת קובץ tsconfig.json
בסיסי עם אפשרויות קומפיילר נפוצות. לאחר מכן, תוכלו להתאים את הקובץ לדרישות הספציפיות של הפרויקט שלכם. קובץ tsconfig.json
טיפוסי יכלול אפשרויות כמו compilerOptions
, include
, ו-exclude
.
אפשרויות קומפיילר חיוניות
מקטע ה-compilerOptions
הוא לב ליבו של קובץ ה-tsconfig.json
. הוא מכיל מגוון רחב של אפשרויות השולטות בהתנהגות הקומפיילר של TypeScript. הנה כמה מאפשרויות הקומפיילר החשובות ביותר:
target
אפשרות ה-target
מציינת את גרסת היעד של ECMAScript עבור קוד ה-JavaScript שנוצר. ערכים נפוצים כוללים ES5
, ES6
(ES2015), ES2016
, ES2017
, ES2018
, ES2019
, ES2020
, ES2021
, ES2022
, ESNext
. בחירת ה-target הנכון היא חיונית להבטחת תאימות עם סביבת הריצה המיועדת, כמו דפדפנים או גרסאות Node.js.
דוגמה:
{
"compilerOptions": {
"target": "ES2020"
}
}
module
אפשרות ה-module
מציינת את סגנון יצירת קוד המודולים. ערכים נפוצים כוללים CommonJS
, AMD
, System
, UMD
, ES6
(ES2015), ES2020
, ו-ESNext
. בחירת מערכת המודולים תלויה בסביבת היעד ובמאגד המודולים (module bundler) המשמש (למשל, Webpack, Rollup, Parcel). עבור Node.js, נהוג להשתמש ב-CommonJS
, בעוד שעבור יישומי ווב מודרניים, עדיף להשתמש ב-ES6
או ESNext
עם מאגד מודולים. שימוש ב-ESNext
מאפשר למפתחים לנצל את התכונות והאופטימיזציות העדכניות ביותר, תוך הסתמכות על המאגד לטפל בפורמט המודול הסופי.
דוגמה:
{
"compilerOptions": {
"module": "ESNext"
}
}
lib
אפשרות ה-lib
מציינת רשימה של קובצי ספריות שיכללו בקומפילציה. קובצי ספריות אלה מספקים הגדרות טיפוסים (type definitions) עבור ממשקי API מובנים של JavaScript וממשקי API של דפדפנים. ערכים נפוצים כוללים ES5
, ES6
, ES2015
, ES2016
, ES2017
, ES2018
, ES2019
, ES2020
, ES2021
, ES2022
, ESNext
, DOM
, WebWorker
, ScriptHost
, ES2015.Core
, ES2015.Collection
, ES2015.Iterable
, ES2015.Promise
, ES2015.Proxy
, ES2015.Reflect
, ES2015.Generator
, ES2015.Symbol
, ES2015.Symbol.WellKnown
, ES2016.Array.Include
, ES2017.object
, ES2017.Intl
, ES2017.SharedMemory
, ES2017.String
, ES2017.TypedArrays
, ES2018.Intl
, ES2018.Promise
, ES2018.RegExp
, ES2019.Array
, ES2019.Object
, ES2019.String
, ES2019.Symbol
, ES2020.BigInt
, ES2020.Promise
, ES2020.String
, ES2020.Symbol.WellKnown
, ES2021.Promise
, ES2021.String
, ES2021.WeakRef
, ES2022.Error
, ES2022.Object
, ES2022.String
, ועוד רבים אחרים. בחירת הספריות המתאימות מבטיחה שלקומפיילר TypeScript יהיה את מידע הטיפוסים הדרוש לסביבת היעד. שימוש בספריית ה-DOM מאפשר לפרויקט לקמפל קוד המשתמש בממשקי API ספציפיים לדפדפן ללא שגיאות טיפוסים.
דוגמה:
{
"compilerOptions": {
"lib": ["ES2020", "DOM"]
}
}
allowJs
אפשרות ה-allowJs
מאפשרת לקומפיילר של TypeScript לקמפל קובצי JavaScript יחד עם קובצי TypeScript. זה שימושי להעברת פרויקטי JavaScript קיימים ל-TypeScript באופן הדרגתי. הגדרת אפשרות זו ל-true
מאפשרת לקומפיילר לעבד קובצי .js
, ומאפשרת אימוץ הדרגתי של TypeScript בתוך הפרויקט.
דוגמה:
{
"compilerOptions": {
"allowJs": true
}
}
jsx
אפשרות ה-jsx
מציינת כיצד יש לטפל בתחביר JSX. ערכים נפוצים כוללים preserve
, react
, react-native
, ו-react-jsx
. preserve
שומר על תחביר ה-JSX בפלט, בעוד ש-react
הופך JSX לקריאות React.createElement. react-jsx
משתמש בטרנספורמציית ה-JSX החדשה שהוצגה ב-React 17, שאינה דורשת ייבוא של React. בחירת אפשרות ה-JSX הנכונה היא חיונית לפרויקטים המשתמשים ב-React או ספריות אחרות מבוססות JSX.
דוגמה:
{
"compilerOptions": {
"jsx": "react-jsx"
}
}
declaration
אפשרות ה-declaration
יוצרת קובצי הצהרה .d.ts
תואמים לכל קובץ TypeScript. קובצי הצהרה מכילים מידע על טיפוסים ומשמשים פרויקטי TypeScript אחרים לצריכת הקוד המהודר. יצירת קובצי הצהרה היא חיונית ליצירת ספריות ומודולים רב-פעמיים. קבצים אלה מאפשרים לפרויקטי TypeScript אחרים להבין את הטיפוסים והממשקים שנחשפים על ידי הספרייה מבלי צורך לקמפל את קוד המקור המקורי.
דוגמה:
{
"compilerOptions": {
"declaration": true
}
}
sourceMap
אפשרות ה-sourceMap
יוצרת קובצי מפת מקור (source map), הממפים את קוד ה-JavaScript שנוצר חזרה לקוד ה-TypeScript המקורי. מפות מקור חיוניות לניפוי באגים בקוד TypeScript בדפדפנים ובסביבות אחרות. כאשר מתרחשת שגיאה בקוד ה-JavaScript, מפת המקור מאפשרת למפתח לראות את קוד ה-TypeScript המתאים במנפה הבאגים, מה שמקל על זיהוי ותיקון הבעיה.
דוגמה:
{
"compilerOptions": {
"sourceMap": true
}
}
outDir
אפשרות ה-outDir
מציינת את ספריית הפלט עבור קובצי ה-JavaScript שנוצרו. אפשרות זו מסייעת לארגן את פלט הבנייה של הפרויקט על ידי הפרדת קוד המקור מהקוד המהודר. שימוש ב-outDir
מקל על ניהול תהליך הבנייה ופריסת היישום.
דוגמה:
{
"compilerOptions": {
"outDir": "dist"
}
}
rootDir
אפשרות ה-rootDir
מציינת את ספריית השורש של פרויקט ה-TypeScript. הקומפיילר משתמש בספרייה זו כבסיס לפתרון שמות מודולים. אפשרות זו חשובה במיוחד לפרויקטים עם מבנה ספריות מורכב. הגדרת rootDir
נכונה מבטיחה שהקומפיילר יוכל למצוא את כל המודולים והתלויות הדרושים.
דוגמה:
{
"compilerOptions": {
"rootDir": "src"
}
}
strict
אפשרות ה-strict
מפעילה את כל אפשרויות בדיקת הטיפוסים הקפדנית. זה מומלץ מאוד לפרויקטי TypeScript חדשים מכיוון שהוא עוזר לתפוס שגיאות פוטנציאליות מוקדם בתהליך הפיתוח. הפעלת מצב קפדני אוכפת כללי בדיקת טיפוסים מחמירים יותר, מה שמוביל לקוד חזק וקל יותר לתחזוקה. זוהי שיטה מומלצת להפעיל מצב קפדני בכל פרויקטי TypeScript חדשים.
דוגמה:
{
"compilerOptions": {
"strict": true
}
}
esModuleInterop
אפשרות ה-esModuleInterop
מאפשרת יכולת פעולה הדדית בין מודולי CommonJS ו-ES. זה חשוב לפרויקטים המשתמשים בשני סוגי המודולים. כאשר esModuleInterop
מופעל, TypeScript תטפל באופן אוטומטי בהבדלים בין מודולי CommonJS ו-ES, מה שמקל על ייבוא וייצוא מודולים בין שתי המערכות. אפשרות זו שימושית במיוחד בעבודה עם ספריות צד שלישי שעשויות להשתמש במערכות מודולים שונות.
דוגמה:
{
"compilerOptions": {
"esModuleInterop": true
}
}
moduleResolution
אפשרות ה-moduleResolution
מציינת כיצד TypeScript פותר ייבואי מודולים. ערכים נפוצים כוללים Node
ו-Classic
. אסטרטגיית פתרון המודולים Node
היא ברירת המחדל ומבוססת על אלגוריתם פתרון המודולים של Node.js. אסטרטגיית פתרון המודולים Classic
היא ישנה יותר ופחות נפוצה. שימוש באסטרטגיית פתרון המודולים Node
מבטיח ש-TypeScript תוכל לפתור נכון ייבואי מודולים בסביבת Node.js.
דוגמה:
{
"compilerOptions": {
"moduleResolution": "Node"
}
}
baseUrl
and paths
אפשרויות ה-baseUrl
וה-paths
משמשות להגדרת פתרון מודולים עבור ייבואי מודולים לא יחסיים. אפשרות ה-baseUrl
מציינת את ספריית הבסיס לפתרון שמות מודולים לא יחסיים. אפשרות ה-paths
מאפשרת למפות שמות מודולים למיקומים ספציפיים במערכת הקבצים. אפשרויות אלה שימושיות במיוחד לפרויקטים עם מבנה ספריות מורכב ולפישוט ייבואי מודולים. שימוש ב-baseUrl
ו-paths
יכול להפוך את הקוד לקריא וקל יותר לתחזוקה.
דוגמה:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@components/*": ["src/components/*"],
"@utils/*": ["src/utils/*"]
}
}
}
אפשרויות Include ו-Exclude
אפשרויות ה-include
וה-exclude
מציינות אילו קבצים יש לכלול בקומפילציה ואילו קבצים יש להחריג. אפשרויות אלה משתמשות בתבניות glob כדי להתאים שמות קבצים. שימוש ב-include
ו-exclude
מאפשר לכם לשלוט באילו קבצים מעובדים על ידי הקומפיילר של TypeScript, מה שמשפר את ביצועי הבנייה ומפחית שגיאות. זוהי שיטה מומלצת לציין במפורש את הקבצים שיש לכלול בקומפילציה.
דוגמה:
{
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}
אפשרות Extends
אפשרות ה-extends
מאפשרת לכם לרשת אפשרויות קומפיילר מקובץ tsconfig.json
אחר. זה שימושי לשיתוף הגדרות תצורה נפוצות בין מספר פרויקטים או ליצירת תצורות בסיס. שימוש באפשרות extends
מקדם שימוש חוזר בקוד ומפחית כפילויות. זוהי שיטה מומלצת ליצור תצורות בסיס ולהרחיב אותן בפרויקטים בודדים.
דוגמה:
{
"extends": "./tsconfig.base.json",
"compilerOptions": {
"jsx": "react-jsx"
},
"include": ["src/**/*"]
}
תצורות מתקדמות
מעבר לאפשרויות הקומפיילר החיוניות, tsconfig.json
תומך בתצורות מתקדמות לתרחישים מיוחדים.
קומפילציה אינקרמנטלית
עבור פרויקטים גדולים, קומפילציה אינקרמנטלית יכולה לשפר משמעותית את זמני הבנייה. TypeScript יכולה לשמור במטמון את תוצאות הקומפילציות הקודמות ולקמפל מחדש רק קבצים שהשתנו. הפעלת קומפילציה אינקרמנטלית יכולה להפחית באופן דרמטי את זמני הבנייה עבור פרויקטים גדולים. זה חשוב במיוחד לפרויקטים עם מספר רב של קבצים ותלויות.
{
"compilerOptions": {
"incremental": true,
"tsBuildInfoFile": ".tsbuildinfo"
}
}
הפניות פרויקט (Project References)
הפניות פרויקט מאפשרות לכם לבנות פרויקטי TypeScript גדולים למודולים קטנים ועצמאיים. זה יכול לשפר את זמני הבנייה ואת ארגון הקוד. שימוש בהפניות פרויקט יכול להפוך פרויקטים גדולים לניתנים יותר לניהול וקלים יותר לתחזוקה. זוהי שיטה מומלצת להשתמש בהפניות פרויקט עבור פרויקטים גדולים ומורכבים.
{
"compilerOptions": {
"composite": true
},
"references": [
{ "path": "./module1" },
{ "path": "./module2" }
]
}
הגדרות טיפוסים מותאמות אישית
לפעמים, ייתכן שתצטרכו לספק הגדרות טיפוסים לספריות JavaScript שאין להן כאלה. אתם יכולים ליצור קובצי .d.ts
מותאמים אישית כדי להגדיר את הטיפוסים עבור ספריות אלה. יצירת הגדרות טיפוסים מותאמות אישית מאפשרת לכם להשתמש בספריות JavaScript בקוד ה-TypeScript שלכם מבלי לוותר על בטיחות טיפוסים. זה שימושי במיוחד בעבודה עם קוד JavaScript מדור קודם או ספריות שאינן מספקות הגדרות טיפוסים משלהן.
// custom.d.ts
declare module 'my-library' {
export function doSomething(x: number): string;
}
שיטות עבודה מומלצות
- השתמשו במצב קפדני (Strict Mode): הפעילו את אפשרות
strict
לבדיקת טיפוסים משופרת. - ציינו יעד (Target): בחרו את גרסת ה-
target
המתאימה לסביבת הריצה שלכם. - ארגנו את הפלט: השתמשו ב-
outDir
כדי להפריד בין קוד המקור לקוד המהודר. - נהלו תלויות: השתמשו ב-
include
ו-exclude
כדי לשלוט באילו קבצים מקומפלים. - נצלו את Extends: שתפו הגדרות תצורה נפוצות עם אפשרות
extends
. - שמרו את התצורה בבקרת גרסאות: בצעו commit לקובץ `tsconfig.json` ב-git כדי לשמור על עקביות בין סביבות הפיתוח וצינורות CI/CD.
פתרון בעיות נפוצות
הגדרת tsconfig.json
יכולה לפעמים להיות מאתגרת. הנה כמה בעיות נפוצות והפתרונות שלהן:
בעיות בפתרון מודולים
אם אתם נתקלים בשגיאות בפתרון מודולים, ודאו שאפשרות moduleResolution
מוגדרת כראוי ושאפשרויות baseUrl
ו-paths
מוגדרות כהלכה. בדקו שוב את הנתיבים שצוינו באפשרות paths
כדי לוודא שהם נכונים. ודאו שכל המודולים הדרושים מותקנים בספריית node_modules
.
שגיאות טיפוסים
שגיאות טיפוסים יכולות להתרחש אם הגדרות הטיפוסים אינן נכונות או חסרות. ודאו שהגדרות הטיפוסים הנכונות מותקנות עבור כל הספריות שבהן אתם משתמשים. אם אתם משתמשים בספריית JavaScript שאין לה הגדרות טיפוסים, שקלו ליצור הגדרות טיפוסים מותאמות אישית.
שגיאות קומפילציה
שגיאות קומפילציה יכולות להתרחש אם יש שגיאות תחביר או שגיאות טיפוסים בקוד ה-TypeScript שלכם. עברו בקפידה על הודעות השגיאה ותקנו כל שגיאת תחביר או טיפוס. ודאו שהקוד שלכם עומד במוסכמות הקידוד של TypeScript.
סיכום
קובץ tsconfig.json
מוגדר היטב הוא חיוני להצלחת פרויקט TypeScript. על ידי הבנת אפשרויות הקומפיילר החיוניות והתצורות המתקדמות, תוכלו לייעל את זרימת העבודה שלכם בפיתוח, לשפר את איכות הקוד, ולהבטיח תאימות עם סביבת היעד. השקעת זמן בהגדרת tsconfig.json
כראוי תשתלם בטווח הארוך על ידי הפחתת שגיאות, שיפור התחזוקתיות, וייעול תהליך הבנייה. זה מביא לפיתוח תוכנה יעיל ואמין יותר. המידע המסופק כאן נועד להיות ישים באופן אוניברסלי, ואמור לספק בסיס מוצק להתחלת פרויקט חדש עם TypeScript.
זכרו לעיין בתיעוד הרשמי של TypeScript לקבלת המידע המעודכן ביותר והסברים מפורטים על כל אפשרויות הקומפיילר הזמינות. התיעוד של TypeScript הוא משאב רב ערך להבנת המורכבויות של תצורת TypeScript.