Menu
Coddy logo textTech

TypeScript Cheat Sheet: דף עזר מהיר

עודכן לאחרונה

טיפוסים בסיסיים

הטיפוסים הפרימיטיביים ואיך מצמידים טיפוס למשתנים.

פעולהתחביר
מחרוזת (String)let name: string = "Ada";
מספר (Number)let age: number = 25;
בוליאני (Boolean)let ok: boolean = true;
מערך של Tlet xs: number[] = [1, 2, 3];
מערך גנריlet xs: Array<string> = [];
Tuplelet pair: [string, number] = ["a", 1];
Any (ויתור על בדיקת טיפוסים)let x: any = 1;
Unknown (any בטוח יותר)let x: unknown = JSON.parse(s);
Void (בלי ערך מוחזר)function log(): void { … }
Never (אף פעם לא חוזרת)function fail(): never { throw … }
Null / undefinedlet n: null = null;

הסקת טיפוסים והצהרות טיפוס

מתי לתת ל-TS להסיק את הטיפוס ומתי לציין אותו במפורש.

פעולהתחביר
מוסק מהערךlet count = 0; // number
הצהרת טיפוס מפורשתlet count: number = 0;
פרמטר של פונקציהfunction add(a: number, b: number) { … }
טיפוס ההחזרהfunction add(a: number, b: number): number { … }
פונקציית חץconst sq = (x: number): number => x * x;
Type assertionconst el = input as HTMLInputElement;
Const assertion (ליטרל)const dirs = ["up", "down"] as const;
Non-null assertionel!.focus();

Interfaces

תיאור המבנה של אובייקט.

פעולהתחביר
הגדרהinterface User { id: number; name: string; }
מאפיין אופציונליinterface User { age?: number; }
מאפיין לקריאה בלבדinterface User { readonly id: number; }
חתימת מתודהinterface Logger { log(msg: string): void; }
הרחבת interface אחרinterface Admin extends User { role: string; }
Index signatureinterface Map { [key: string]: number; }
מימוש במחלקהclass Db implements Logger { … }

Type aliases ו-unions

מתן שם לטיפוס ושילוב טיפוסים עם | ו-&.

פעולהתחביר
Type aliastype ID = string | number;
Type alias לאובייקטtype User = { id: number; name: string };
טיפוס uniontype Status = "idle" | "loading" | "done";
טיפוס intersectiontype Admin = User & { role: string };
טיפוס ליטרליtype Yes = "yes";
ערך שיכול להיות nulltype Maybe<T> = T | null | undefined;
Type alias לפונקציהtype Handler = (e: Event) => void;

פונקציות

פרמטרים וערכים מוחזרים עם טיפוסים, ו-overloads.

פעולהתחביר
פרמטר אופציונליfunction greet(name?: string) { … }
פרמטר ברירת מחדלfunction greet(name = "friend") { … }
פרמטרי restfunction sum(...ns: number[]): number { … }
טיפוס פונקציהlet fn: (a: number) => number;
interface שאפשר לקרוא לוinterface Fn { (x: number): number; }
חתימות overloadfunction f(x: string): string; function f(x: number): number; function f(x: any) { return x; }
החזרת void שמתעלמים ממנהconst cb: () => void = () => 42; // ok

מחלקות

מחלקות עם מגדירי גישה ו-parameter properties.

פעולהתחביר
הגדרת מחלקהclass User { name: string; }
בנאיconstructor(name: string) { this.name = name; }
Parameter propertyconstructor(public name: string) {}
Public / private / protectedprivate id: number;
שדה לקריאה בלבדreadonly id: number;
חבר סטטיstatic count = 0;
Getter / setterget name() { return this._name; }
ירושהclass Admin extends User { … }
מחלקה אבסטרקטיתabstract class Shape { abstract area(): number; }

Generics

טיפוסים לשימוש חוזר שמקבלים טיפוסים אחרים כפרמטרים.

פעולהתחביר
פונקציה גנריתfunction id<T>(x: T): T { return x; }
קריאה עם טיפוס מפורשid<string>("hi");
interface גנריinterface Box<T> { value: T; }
type alias גנריtype Pair<A, B> = [A, B];
מחלקה גנריתclass Stack<T> { items: T[] = []; }
הגבלה עם extendsfunction len<T extends { length: number }>(x: T) { return x.length; }
פרמטר טיפוס ברירת מחדלinterface Box<T = string> { value: T; }
האופרטור keyoftype K = keyof User; // "id" | "name"
טיפוס גישה לפי אינדקסtype Name = User["name"];

Narrowing

צמצום של union לטיפוס יחיד בזמן ריצה.

פעולהתחביר
בדיקת typeofif (typeof x === "string") { … }
בדיקת instanceofif (e instanceof Error) { … }
האופרטור inif ("name" in obj) { … }
צמצום לפי שוויוןif (status === "done") { … }
בדיקת truthinessif (value) { … }
Type guard מותאםfunction isUser(x: any): x is User { return "id" in x; }
Discriminated uniontype Shape = { kind: "sq"; size: number } | { kind: "ci"; r: number };
בדיקת כיסוי מלא עם neverconst _: never = shape;

Enums

קבוצות של קבועים עם שמות.

פעולהתחביר
enum מספריenum Direction { Up, Down, Left, Right }
enum של מחרוזותenum Status { Idle = "IDLE", Done = "DONE" }
שימוש בערךlet d: Direction = Direction.Up;
Const enum (מוטמע בקוד)const enum Color { Red, Green, Blue }
Union של ליטרלים (הדרך המודרנית)type Status = "idle" | "done";

Utility types

כלי עזר מובנים שמשנים טיפוסים קיימים.

פעולהתחביר
הפיכת כל המאפיינים לאופציונלייםPartial<User>
הפיכת כל המאפיינים לחובהRequired<User>
הפיכת כל המאפיינים לקריאה בלבדReadonly<User>
בחירת חלק מהמפתחותPick<User, "id" | "name">
השמטת מפתח אחד או יותרOmit<User, "password">
אובייקט עם מפתחות נתוניםRecord<string, number>
הוצאה מ-unionExclude<"a" | "b" | "c", "a">
השארת חלק מ-union בלבדExtract<"a" | "b", "a" | "c">
הסרת null / undefinedNonNullable<string | null>
טיפוס ההחזרה של פונקציהReturnType<typeof fn>
tuple של הפרמטרים של פונקציהParameters<typeof fn>
הטיפוס של promise אחרי awaitAwaited<Promise<string>>

מודולים

ייבוא וייצוא בין קבצים.

פעולהתחביר
ייצוא בשםexport function add(a: number, b: number) { … }
ייצוא ברירת מחדלexport default class User { … }
ייצוא מחדשexport { User } from "./user";
ייבוא בשםimport { add } from "./math";
ייבוא ברירת מחדלimport User from "./user";
ייבוא של טיפוס בלבדimport type { User } from "./user";
ייבוא של הכולimport * as math from "./math";
הפניית triple-slash/// <reference types="node" />

הגדרות tsconfig חיוניות

דגלי הקומפיילר שכדאי להכיר.

אפשרותהשפעה
"strict": trueמפעיל את כל הבדיקות של מצב strict (מומלץ).
"target": "ES2022"גרסת ה-JavaScript ש-tsc מייצר.
"module": "ESNext"מערכת המודולים בפלט שנוצר.
"moduleResolution": "bundler"פתרון מודולים כמו שעושים bundlers מודרניים.
"jsx": "react-jsx"הפעלת JSX עבור React 17 ומעלה.
"esModuleInterop": trueייבוא ברירת מחדל נקי יותר ממודולי CommonJS.
"skipLibCheck": trueדילוג על בדיקת טיפוסים ב-node_modules (בנייה מהירה יותר).
"noEmit": trueבדיקת טיפוסים בלבד: את יצירת הפלט משאירים ל-bundler.

התחביר של TypeScript שאתם צריכים הכי הרבה, בעמוד אחד. ה-TypeScript cheat sheet הזה הוא דף עזר מהיר לעבודה היומיומית עם TS: טיפוסים בסיסיים, interfaces, type aliases, generics, unions, narrowing וה-utility types המובנים. מכיוון ש-TypeScript בנויה על JavaScript, כדאי להחזיק גם את דף העזר של JavaScript בהישג יד בשביל התחביר הבסיסי.

כל מה שכאן הוא TypeScript סטנדרטי שמתקמפל עם tsc ורץ בכל מקום שבו רץ JavaScript מודרני. העתיקו את מה שאתם צריכים, או נסו כל קטע קוד בזמן אמת בעורך האונליין של TypeScript, בלי להתקין כלום. חדשים בטיפוסים? קורס ה-TypeScript האינטראקטיבי והחינמי של Coddy בונה אותם צעד אחר צעד על בסיס JavaScript.

שאלות נפוצות על ה-TypeScript cheat sheet

האם ה-TypeScript cheat sheet הזה חינמי?
כן. ה-TypeScript cheat sheet הזה חינמי לגמרי, בלי צורך בהרשמה. שמרו אותו במועדפים וחזרו אליו בכל פעם שתצטרכו לבדוק טיפוס, interface או utility type.
מה ההבדל בין interface ל-type alias?
שניהם יכולים לתאר את המבנה של אובייקט, וברוב המקרים היומיומיים אפשר להחליף ביניהם. את interfaces אפשר לפתוח מחדש ולהרחיב בין קבצים (declaration merging), וזה שימושי לטיפוסים של ספריות. Type aliases יכולים לתת שם ל-unions, intersections, tuples ו-mapped types, מבנים שאי אפשר לבטא עם interface. כלל נפוץ: השתמשו ב-interface למבני אובייקטים ציבוריים, וב-type ל-unions, tuples וטיפוסים מחושבים.
מה ההבדל בין any ל-unknown?
any מבטל לגמרי את בדיקת הטיפוסים: הקומפיילר ירשה לכם לעשות איתו כל דבר. unknown בטוח מבחינת טיפוסים: חייבים לצמצם אותו (עם typeof, instanceof או type guard) לפני שאפשר להשתמש בו. העדיפו unknown לערכים ממקורות חיצוניים כמו JSON.parse או fetch, כי הוא מכריח אתכם לאמת אותם לפני השימוש.
האם צריך ללמוד JavaScript לפני TypeScript?
כן. TypeScript היא JavaScript עם מערכת טיפוסים מעליה, כך שכל מיומנות ב-JavaScript עוברת איתכם. אם אתם עדיין בונים את יסודות ה-JS (מערכים, אובייקטים, async/await), דף העזר של JavaScript הוא נקודת התחלה טובה, וקורס ה-JavaScript החינמי של Coddy מלמד את אותם נושאים באופן אינטראקטיבי.
אפשר לתרגל TypeScript אונליין?
כן. פתחו את עורך האונליין של TypeScript כדי להריץ כל קטע קוד מדף העזר הזה בדפדפן, בלי להתקין כלום. כשתרצו מסגרת מסודרת, למדו דרך עמוד ה-JavaScript של Coddy והוסיפו מעל את הטיפוסים מהעמוד הזה.
איור של שפות התכנות ב-Coddy

ללמוד TypeScript עם Coddy

להתחיל