לדלג לתוכן

5.1 הקדמה לטייפסקריפט תרגול

תרגול - הקדמה לטייפסקריפט

תרגיל 1 - הקמת פרויקט טייפסקריפט

הקימו פרויקט טייפסקריפט מאפס:

א. צרו תיקיה חדשה, הריצו npm init -y ואז התקינו טייפסקריפט.

ב. צרו קובץ tsconfig.json עם ההגדרות הבאות:
- target: ES2020
- module: ESNext
- strict: true
- outDir: dist
- rootDir: src

ג. צרו תיקיית src ובתוכה קובץ index.ts שמדפיס "Hello from TypeScript!".

ד. קמפלו עם npx tsc והריצו את הפלט עם node dist/index.js.

תרגיל 2 - הוספת טיפוסים בסיסיים

הוסיפו type annotations לכל המשתנים הבאים:

let firstName = "Alice";
let lastName = "Smith";
let age = 25;
let isLoggedIn = true;
let score = 98.5;
let greeting = `Hello, ${firstName}!`;

עכשיו נסו לשנות את הערך של כל משתנה לטיפוס אחר ובדקו שטייפסקריפט נותנת שגיאה:

firstName = 42;       // should this work?
age = "twenty-five";  // should this work?
isLoggedIn = 1;       // should this work?

תרגיל 3 - הסקת טיפוסים

לכל אחד מהמקרים הבאים, ענו: מה הטיפוס שטייפסקריפט תסיק? ואז בדקו (ב-IDE, רחפו עם העכבר מעל המשתנה).

let a = 42;
let b = "hello";
let c = true;
let d = [1, 2, 3];
let e = { name: "Alice", age: 30 };
let f = null;
let g = undefined;
let h = Math.random() > 0.5 ? "yes" : "no";
let i = Math.random() > 0.5 ? 42 : "hello";

שאלה: באילו מקרים הטיפוס שטייפסקריפט מסיקה הוא לא מה שציפיתם?

תרגיל 4 - תרגום מפייתון לטייפסקריפט

תרגמו את הקוד הבא מפייתון לטייפסקריפט. הוסיפו type annotations לכל הפרמטרים וערכי החזרה:

def calculate_area(width: float, height: float) -> float:
    return width * height

def format_name(first: str, last: str) -> str:
    return f"{first} {last}"

def is_adult(age: int) -> bool:
    return age >= 18

def describe_person(name: str, age: int, city: str = "Unknown") -> str:
    return f"{name} is {age} years old and lives in {city}"

area = calculate_area(5.0, 3.0)
full_name = format_name("Alice", "Smith")
adult = is_adult(20)
description = describe_person("Bob", 25, "Tel Aviv")
description2 = describe_person("Charlie", 30)

print(area)
print(full_name)
print(adult)
print(description)
print(description2)

תרגיל 5 - זיהוי שגיאות

הקוד הבא מכיל שגיאות טיפוסים. מצאו את כולן ותקנו:

let username: string = "Alice";
let userAge: number = "25";
let isActive: boolean = "true";

function multiply(a: number, b: number): number {
    return a + " x " + b;
}

function getGreeting(name: string): string {
    if (name) {
        return "Hello, " + name;
    }
}

let numbers: number[] = [1, 2, "3", 4, 5];

let result: string = multiply(5, 3);

תרגיל 6 - tsconfig.json

א. מה קורה אם מכבים את strict ומשאירים את הקוד הבא? האם יש שגיאה?

function greet(name) {
    console.log("Hello, " + name);
}

let value = null;
console.log(value.toString());

ב. מה קורה אם מפעילים את strict? אילו שגיאות צצות?

ג. הוסיפו את התיקונים הנדרשים כדי שהקוד יעבוד עם strict mode.

תרגיל 7 - הרצה עם tsx

א. התקינו את tsx בפרויקט שלכם: npm install -D tsx.

ב. צרו קובץ playground.ts עם כמה פונקציות פשוטות (עם טיפוסים) והריצו אותו ישירות עם npx tsx playground.ts.

ג. השוו את התהליך: כמה צעדים צריך עם tsc + node לעומת tsx?

תרגיל 8 - השוואת JS לעומת TS

כתבו את הפונקציה הבאה פעם אחת ב-JS רגיל ופעם אחת ב-TS:

פונקציה createProfile שמקבלת שם (מחרוזת), גיל (מספר), ותחביבים (מערך של מחרוזות), ומחזירה אובייקט עם כל הפרטים האלה ועוד שדה summary שהוא מחרוזת מפורמטת.

דוגמה:

createProfile("Alice", 30, ["reading", "coding"])
// returns:
// {
//   name: "Alice",
//   age: 30,
//   hobbies: ["reading", "coding"],
//   summary: "Alice is 30 years old and enjoys reading, coding"
// }

בגרסת ה-TS, הוסיפו טיפוסים לכל פרמטר, לערך ההחזרה, ולמשתנים שמחזיקים את התוצאה.

שאלות

  1. מה ההבדל בין טייפסקריפט לג׳אווהסקריפט?
  2. האם טייפסקריפט רצה ישירות בדפדפן? למה?
  3. מה תפקיד הקומפיילר tsc?
  4. למה חשוב להפעיל strict mode?
  5. מה ההבדל בין type hints בפייתון לטיפוסים בטייפסקריפט?
  6. מה זה type inference? תנו דוגמה.
  7. מתי כן צריך לכתוב type annotation ומתי אפשר לסמוך על הסקה?