-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathLesson.ts
212 lines (170 loc) · 4.93 KB
/
Lesson.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
/* **************************
DETAYLI TYPESCRIPT CHEATSHEET
Başlangıçtan İleri Seviyeye Türkçe/İngilizce Açıklamalı
************************** */
// ===== 1. TEMEL TİPLER (BASIC TYPES) =====
// A. Primitive Types (Temel Tipler) (5)
let isim: string = "Ahmet"; // String
let yas: number = 30; // Number
let aktifMi: boolean = true; // Bool (True or False)
let tanimsiz: undefined; // Undefined
let bosDeger: null = null; // NULL
// B. Type Inference (Tip Çıkarımı)
let sehir = "İstanbul"; // Otomatik string tipi
// sehir = 34; // HATA: Tip uyuşmazlığı
// C. Explicit Types
let telefon: number;
telefon = 5551234567;
// telefon = "5551234567"; // HATA
// D. Union Types
let id: string | number = "ABC123";
id = 123; // Geçerli
// id = true; // HATA
// ===== 2. DİZİLER (ARRAYS) =====
// A. Temel Kullanım
let meyveler: string[] = ["Elma", "Muz"];
let sayilar: number[] = [1, 2, 3];
// B. Çoklu Tip Diziler
let karisik: (string | number)[] = ["Elma", 5, 7];
// C. Tuple (Demet)
let kullaniciBilgisi: [string, number] = ["Ahmet", 30];
// kullaniciBilgisi = [30, "Ahmet"]; // HATA: Sıra önemli
// ===== 3. NESNELER (OBJECTS) =====
// A. Temel Obje
let kullanici: {
ad: string;
yas: number;
eposta?: string; // Optional (Opsiyonel)
} = {
ad: "Ayşe",
yas: 25
};
// B. Index Signature
let esnekObje: {
[key: string]: number | string;
} = {
yas: 30,
meslek: "Mühendis"
};
// ===== 4. FONKSİYONLAR (FUNCTIONS) =====
// A. Temel Fonksiyon
function topla(a: number, b: number): number {
return a + b;
}
// B. Opsiyonel Parametreler
function selamla(ad: string, soyad?: string): string {
return soyad ? `Merhaba ${ad} ${soyad}` : `Merhaba ${ad}`;
}
// C. Arrow Function
const kareAl = (sayi: number): number => sayi * sayi;
// D. Generic Fonksiyon
function arrayDoldur<T>(value: T, count: number): T[] {
return new Array(count).fill(value);
}
const sayiDizi = arrayDoldur<number>(5, 3); // [5,5,5]
const metinDizi = arrayDoldur("Merhaba", 2); // ["Merhaba","Merhaba"]
// ===== 5. TYPE ALIAS & INTERFACE =====
// A. Type Alias
type Kullanici = {
id: number;
ad: string;
eposta: string;
};
// B. Interface
interface IUrun {
id: number;
ad: string;
fiyat: number;
stoktaVarMi: boolean;
// Metot Tanımı
fiyatGuncelle(yeniFiyat: number): void;
}
// C. Interface Extension
interface IDigitalUrun extends IUrun {
dosyaBoyutu: string;
indirmeLinki: string;
}
// ===== 6. GENERICS (JENERİKLER) =====
// A. Generic Interface
interface APIResponse<T> {
status: number;
data: T;
hata?: string;
}
// Kullanım Örneği
const kullaniciYaniti: APIResponse<Kullanici> = {
status: 200,
data: {
id: 1,
ad: "Mehmet",
eposta: "[email protected]"
}
};
// B. Generic Constraints (Kısıtlamalar)
interface Uzunluk {
length: number;
}
function uzunlukYazdir<T extends Uzunluk>(item: T): void {
console.log(`Uzunluk: ${item.length}`);
}
uzunlukYazdir("Merhaba"); // 7
uzunlukYazdir([1,2,3]); // 3
// ===== 7. UTILITY TYPES (YARDIMCI TİPLER) =====
type KullaniciGereken = Required<Kullanici>; // Tüm alanlar zorunlu
type KullaniciOpsiyonel = Partial<Kullanici>; // Tüm alanlar opsiyonel
type KullaniciBasit = Pick<Kullanici, "id" | "ad">; // Seçili alanlar
type KullaniciWithoutId = Omit<Kullanici, "id">; // Hariç tutulan alanlar
// ===== 8. GELİŞMİŞ KONULAR =====
// A. Decorators (Dekoratörler)
function log(target: any, key: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function(...args: any[]) {
console.log(`Metot Çağrıldı: ${key}`);
return originalMethod.apply(this, args);
};
return descriptor;
}
class HesapMakinesi {
@log
topla(a: number, b: number): number {
return a + b;
}
}
// B. Conditional Types (Koşullu Tipler)
type CheckNumber<T> = T extends number ? "Evet" : "Hayır";
type Sonuc1 = CheckNumber<5>; // "Evet"
type Sonuc2 = CheckNumber<"test">; // "Hayır"
// ===== 9. MODERN SYNTAX =====
// A. Optional Chaining (?.)
const kullanici2 = {
adres: {
sehir: "Ankara"
}
};
console.log(kullanici2.adres?.postaKodu?.substring(0,2)); // Hata vermez
// B. Nullish Coalescing (??)
const config = {
timeout: 0
};
const timeout = config.timeout ?? 3000; // 0
// C. Template Literal Types
type HTTPMethod = "GET" | "POST" | "PUT" | "DELETE";
type APIEndpoint = `/api/${string}`;
const endpoint: APIEndpoint = "/api/users"; // Geçerli
// const endpoint2: APIEndpoint = "/users"; // HATA
// ===== 10. HATA YÖNETİMİ =====
// A. Custom Error Types
class ValidationError extends Error {
constructor(public field: string, message: string) {
super(message);
this.name = "ValidationError";
}
}
// B. Try-Catch with Type Guard
try {
// Kodunuz
} catch (error) {
if (error instanceof ValidationError) {
console.log(`Hata Alanı: ${error.field}`);
}
}