{"id":38412,"date":"2026-01-30T16:41:01","date_gmt":"2026-01-30T13:41:01","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=38412"},"modified":"2026-01-30T16:41:01","modified_gmt":"2026-01-30T13:41:01","slug":"typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/","title":{"rendered":"TypeScript&#8217;te Tip Takma Adlar\u0131 (Type Aliases) Nas\u0131l Kullan\u0131l\u0131r?"},"content":{"rendered":"<p><body><\/p>\n<h2>TypeScript&#8217;te Tip Takma Adlar\u0131 (Type Aliases) Nas\u0131l Kullan\u0131l\u0131r?<\/h2>\n<h2>Giri\u015f<\/h2>\n<p>Modern web uygulamalar\u0131n\u0131n karma\u015f\u0131kl\u0131\u011f\u0131 artt\u0131k\u00e7a, geli\u015ftiricilerin kodlar\u0131n\u0131 daha anla\u015f\u0131l\u0131r, bak\u0131m\u0131 kolay ve hatas\u0131z hale getirme ihtiyac\u0131 da artmaktad\u0131r. JavaScript&#8217;in s\u00fcper k\u00fcmesi olan TypeScript, bu ihtiya\u00e7lara cevap vermek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Statik tip kontrol\u00fc, geli\u015ftirme a\u015famas\u0131nda hatalar\u0131 yakalama, kodun okunabilirli\u011fini art\u0131rma ve b\u00fcy\u00fck \u00f6l\u00e7ekli uygulamalar\u0131n y\u00f6netimini kolayla\u015ft\u0131rma gibi bir\u00e7ok avantaj sunar. TypeScript&#8217;in temel \u00f6zelliklerinden biri, karma\u015f\u0131k tipleri daha basit, yeniden kullan\u0131labilir isimler alt\u0131nda toplaman\u0131z\u0131 sa\u011flayan &#8220;Tip Takma Adlar\u0131&#8221; (Type Aliases) kavram\u0131d\u0131r.<\/p>\n<p>Bu makalede, TypeScript&#8217;teki tip takma adlar\u0131n\u0131n ne oldu\u011funu, neden kullan\u0131ld\u0131\u011f\u0131n\u0131 ve \u00e7e\u015fitli senaryolarda nas\u0131l etkili bir \u015fekilde uygulanabilece\u011fini derinlemesine inceleyece\u011fiz. Temel kullan\u0131mdan geli\u015fmi\u015f generic tiplere, ko\u015fullu tiplere ve aray\u00fczlerle (interfaces) kar\u015f\u0131la\u015ft\u0131rmas\u0131na kadar geni\u015f bir yelpazede konulara de\u011finecek, pratik \u00f6rneklerle konuyu peki\u015ftirece\u011fiz. Amac\u0131m\u0131z, TypeScript projelerinizde tip takma adlar\u0131n\u0131 ustaca kullanarak kod kalitenizi bir \u00fcst seviyeye ta\u015f\u0131man\u0131z i\u00e7in kapsaml\u0131 bir rehber sunmakt\u0131r.<\/p>\n<h2>Temel Kavramlar ve Kullan\u0131m<\/h2>\n<p>Tip takma adlar\u0131, mevcut bir tipe yeni bir isim vermemizi sa\u011flayan <code>type<\/code> anahtar kelimesiyle tan\u0131mlan\u0131r. Bu, \u00f6zellikle uzun ve karma\u015f\u0131k tip tan\u0131mlamalar\u0131n\u0131 k\u0131saltmak, kodun okunabilirli\u011fini art\u0131rmak ve ayn\u0131 tip tan\u0131m\u0131n\u0131 birden fazla yerde tekrar etmekten ka\u00e7\u0131nmak istedi\u011fimizde olduk\u00e7a faydal\u0131d\u0131r.<\/p>\n<h3><code>type<\/code> Anahtar Kelimesi Nedir?<\/h3>\n<p><code>type<\/code> anahtar kelimesi, bir tipe referans olu\u015fturan yeni bir isim tan\u0131mlamak i\u00e7in kullan\u0131l\u0131r. Bu isim, orijinal tipin t\u00fcm \u00f6zelliklerini ve davran\u0131\u015flar\u0131n\u0131 miras al\u0131r.<\/p>\n<pre><code class=\"language-typescript\">type StringOrNumber = string | number;\n\nlet value: StringOrNumber;\nvalue = \"Merhaba\"; \/\/ Ge\u00e7erli\nvalue = 123;     \/\/ Ge\u00e7erli\n\/\/ value = true; \/\/ Hata: Type 'boolean' is not assignable to type 'StringOrNumber'.<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>StringOrNumber<\/code> ad\u0131nda yeni bir tip takma ad\u0131 tan\u0131mlad\u0131k. Bu takma ad, <code>string<\/code> veya <code>number<\/code> olabilecek bir de\u011feri temsil eder. Art\u0131k kodumuzda <code>string | number<\/code> yerine <code>StringOrNumber<\/code> kullanarak hem daha k\u0131sa hem de daha a\u00e7\u0131klay\u0131c\u0131 bir tip tan\u0131m\u0131 elde etmi\u015f olduk.<\/p>\n<h3>Temel Tipler \u0130\u00e7in Kullan\u0131m<\/h3>\n<p>En basit haliyle, ilkel (primitive) tipler i\u00e7in takma adlar olu\u015fturabiliriz:<\/p>\n<pre><code class=\"language-typescript\">type ID = string;\ntype Metin = string;\ntype Say\u0131 = number;\ntype Durum = boolean;\n\nlet kullan\u0131c\u0131ID: ID = \"user-123\";\nlet \u00fcr\u00fcnAd\u0131: Metin = \"Laptop\";\nlet fiyat: Say\u0131 = 1200.50;\nlet aktifMi: Durum = true;<\/code><\/pre>\n<p>Bu kullan\u0131m, \u00f6zellikle alan adlar\u0131n\u0131 (domain-specific names) tiplere ba\u011flamak ve kodun niyetini daha net ifade etmek istedi\u011fimizde faydal\u0131d\u0131r.<\/p>\n<h3>Union Tipleri ile Kullan\u0131m<\/h3>\n<p>Union tipleri, bir de\u011fi\u015fkenin birden fazla farkl\u0131 tipten herhangi biri olabilece\u011fini belirtmek i\u00e7in kullan\u0131l\u0131r. Tip takma adlar\u0131, bu karma\u015f\u0131k union tiplerini daha y\u00f6netilebilir hale getirir.<\/p>\n<pre><code class=\"language-typescript\">type HTTPDurumKodu = 200 | 400 | 404 | 500;\ntype \u0130\u015flemSonucu = { ba\u015far\u0131: true; veri: any } | { ba\u015far\u0131: false; hata: string };\n\nfunction i\u015flemYap(kod: HTTPDurumKodu): \u0130\u015flemSonucu {\n  if (kod === 200) {\n    return { ba\u015far\u0131: true, veri: \"\u0130\u015flem ba\u015far\u0131l\u0131!\" };\n  } else {\n    return { ba\u015far\u0131: false, hata: <code>Hata kodu: ${kod}<\/code> };\n  }\n}\n\nlet sonuc1 = i\u015flemYap(200); \/\/ { ba\u015far\u0131: true, veri: \"\u0130\u015flem ba\u015far\u0131l\u0131!\" }\nlet sonuc2 = i\u015flemYap(404); \/\/ { ba\u015far\u0131: false, hata: \"Hata kodu: 404\" }<\/code><\/pre>\n<p>Burada <code>HTTPDurumKodu<\/code> ve <code>\u0130\u015flemSonucu<\/code> takma adlar\u0131, kodun okunabilirli\u011fini ve anla\u015f\u0131l\u0131rl\u0131\u011f\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<\/p>\n<h3>Intersection Tipleri ile Kullan\u0131m<\/h3>\n<p>Intersection tipleri, birden fazla tipi birle\u015ftirerek t\u00fcm tiplerin \u00f6zelliklerine sahip yeni bir tip olu\u015fturur. Tip takma adlar\u0131, bu birle\u015fimleri de anlaml\u0131 isimler alt\u0131nda toplaman\u0131za olanak tan\u0131r.<\/p>\n<pre><code class=\"language-typescript\">type Kullan\u0131c\u0131Bilgisi = {\n  id: string;\n  ad: string;\n  soyad: string;\n};\n\ntype \u0130leti\u015fimBilgisi = {\n  email: string;\n  telefon?: string;\n};\n\ntype TamKullan\u0131c\u0131 = Kullan\u0131c\u0131Bilgisi & \u0130leti\u015fimBilgisi;\n\nconst kullan\u0131c\u0131: TamKullan\u0131c\u0131 = {\n  id: \"u-456\",\n  ad: \"Ay\u015fe\",\n  soyad: \"Y\u0131lmaz\",\n  email: \"ayse.yilmaz@example.com\",\n};\n\n\/\/ const eksikKullan\u0131c\u0131: TamKullan\u0131c\u0131 = { id: \"u-789\", ad: \"Mehmet\" }; \/\/ Hata: 'soyad' ve 'email' eksik<\/code><\/pre>\n<p><code>TamKullan\u0131c\u0131<\/code> tipi, hem <code>Kullan\u0131c\u0131Bilgisi<\/code> hem de <code>\u0130leti\u015fimBilgisi<\/code> tiplerinin t\u00fcm \u00f6zelliklerini i\u00e7eren bir nesne olmal\u0131d\u0131r.<\/p>\n<h2>Nesne Tipleri \u0130\u00e7in Tip Takma Adlar\u0131<\/h2>\n<p>Tip takma adlar\u0131n\u0131n en yayg\u0131n ve g\u00fc\u00e7l\u00fc kullan\u0131mlar\u0131ndan biri, nesne yap\u0131lar\u0131n\u0131n tan\u0131mlanmas\u0131d\u0131r. Bu, veri modellerinizi net bir \u015fekilde ifade etmenizi ve tutarl\u0131l\u0131\u011f\u0131 sa\u011flaman\u0131z\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<h3>Nesne Yap\u0131s\u0131n\u0131 Tan\u0131mlama<\/h3>\n<p>Bir nesnenin sahip olabilece\u011fi \u00f6zellikleri, bunlar\u0131n tiplerini ve iste\u011fe ba\u011fl\u0131 olup olmad\u0131klar\u0131n\u0131 belirtebiliriz.<\/p>\n<pre><code class=\"language-typescript\">type \u00dcr\u00fcn = {\n  id: string;\n  isim: string;\n  fiyat: number;\n  a\u00e7\u0131klama?: string; \/\/ \u0130ste\u011fe ba\u011fl\u0131 \u00f6zellik\n  readonly stokKodu: string; \/\/ Sadece okunabilir \u00f6zellik\n};\n\nconst bilgisayar: \u00dcr\u00fcn = {\n  id: \"p-001\",\n  isim: \"Gaming Bilgisayar\",\n  fiyat: 15000,\n  a\u00e7\u0131klama: \"Y\u00fcksek performansl\u0131 oyun bilgisayar\u0131.\",\n  stokKodu: \"GAM-PC-XYZ\",\n};\n\n\/\/ bilgisayar.stokKodu = \"YEN\u0130-KOD\"; \/\/ Hata: 'stokKodu' salt okunur bir \u00f6zelliktir.<\/code><\/pre>\n<p><code>a\u00e7\u0131klama?<\/code> ile bu \u00f6zelli\u011fin iste\u011fe ba\u011fl\u0131 oldu\u011funu, <code>readonly stokKodu<\/code> ile de bu \u00f6zelli\u011fin nesne olu\u015fturulduktan sonra de\u011fi\u015ftirilemeyece\u011fini belirtmi\u015f olduk.<\/p>\n<h3>\u0130\u00e7 \u0130\u00e7e Nesneler (Nested Objects)<\/h3>\n<p>Karma\u015f\u0131k veri yap\u0131lar\u0131 genellikle i\u00e7 i\u00e7e nesneler i\u00e7erir. Tip takma adlar\u0131, bu yap\u0131lar\u0131 da kolayca tan\u0131mlaman\u0131z\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-typescript\">type Adres = {\n  sokak: string;\n  mahalle: string;\n  \u015fehir: string;\n  postaKodu: string;\n};\n\ntype Sipari\u015f = {\n  sipari\u015fNo: string;\n  m\u00fc\u015fteriID: string;\n  teslimatAdresi: Adres; \/\/ \u0130\u00e7 i\u00e7e nesne\n  \u00fcr\u00fcnler: \u00dcr\u00fcn[]; \/\/ \u00dcr\u00fcn tipinde bir dizi\n  toplamFiyat: number;\n  sipari\u015fTarihi: Date;\n};\n\nconst teslimat: Adres = {\n  sokak: \"G\u00fcl Sk. No:5\",\n  mahalle: \"Merkez\",\n  \u015fehir: \"\u0130stanbul\",\n  postaKodu: \"34000\",\n};\n\nconst sipari\u015fDetay\u0131: Sipari\u015f = {\n  sipari\u015fNo: \"ORD-2023-001\",\n  m\u00fc\u015fteriID: \"u-456\",\n  teslimatAdresi: teslimat,\n  \u00fcr\u00fcnler: [bilgisayar, { id: \"p-002\", isim: \"Monit\u00f6r\", fiyat: 3000, stokKodu: \"MON-ABC\" }],\n  toplamFiyat: 18000,\n  sipari\u015fTarihi: new Date(),\n};<\/code><\/pre>\n<p>Burada <code>Sipari\u015f<\/code> tipi, ba\u015fka bir tip takma ad\u0131 olan <code>Adres<\/code>&#8216;i ve daha \u00f6nce tan\u0131mlad\u0131\u011f\u0131m\u0131z <code>\u00dcr\u00fcn<\/code> tipinden olu\u015fan bir diziyi i\u00e7erir. Bu, kodun hem mod\u00fclerli\u011fini hem de anla\u015f\u0131l\u0131rl\u0131\u011f\u0131n\u0131 art\u0131r\u0131r.<\/p>\n<h3>Dizi Tipleri (Array Types)<\/h3>\n<p>Belirli bir tipten olu\u015fan dizileri de tip takma adlar\u0131 ile tan\u0131mlayabiliriz.<\/p>\n<pre><code class=\"language-typescript\">type Say\u0131Listesi = number[];\ntype Kullan\u0131c\u0131Listesi = Kullan\u0131c\u0131Bilgisi[];\n\nconst say\u0131lar: Say\u0131Listesi = [1, 2, 3, 4, 5];\nconst aktifKullan\u0131c\u0131lar: Kullan\u0131c\u0131Listesi = [\n  { id: \"u1\", ad: \"Ali\", soyad: \"Can\" },\n  { id: \"u2\", ad: \"Veli\", soyad: \"Demir\" },\n];<\/code><\/pre>\n<h3>Fonksiyon Tipleri (Function Types)<\/h3>\n<p>Fonksiyonlar\u0131n parametrelerini ve d\u00f6n\u00fc\u015f de\u011ferlerini tan\u0131mlamak i\u00e7in de tip takma adlar\u0131 kullan\u0131labilir. Bu, ayn\u0131 imza (signature) sahip fonksiyonlar\u0131 farkl\u0131 yerlerde kullan\u0131rken tutarl\u0131l\u0131\u011f\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-typescript\">type HesaplamaFonksiyonu = (a: number, b: number) => number;\ntype Geri\u00c7a\u011f\u0131r\u0131mFonksiyonu = (veri: string) => void;\n\nconst toplama: HesaplamaFonksiyonu = (x, y) => x + y;\nconst \u00e7\u0131karma: HesaplamaFonksiyonu = (x, y) => x - y;\n\nconst mesajG\u00f6nder: Geri\u00c7a\u011f\u0131r\u0131mFonksiyonu = (mesaj) => {\n  console.log(\"G\u00f6nderilen mesaj:\", mesaj);\n};\n\nconsole.log(toplama(5, 3)); \/\/ 8\nmesajG\u00f6nder(\"\u0130\u015flem tamamland\u0131.\"); \/\/ \"G\u00f6nderilen mesaj: \u0130\u015flem tamamland\u0131.\"<\/code><\/pre>\n<h2>Geli\u015fmi\u015f Kullan\u0131m Senaryolar\u0131<\/h2>\n<p>Tip takma adlar\u0131, sadece basit tipleri k\u0131saltmakla kalmaz, ayn\u0131 zamanda genericler, ko\u015fullu tipler ve e\u015flemeli tipler gibi TypeScript&#8217;in daha g\u00fc\u00e7l\u00fc \u00f6zellikleriyle birle\u015ferek son derece esnek ve yeniden kullan\u0131labilir tip tan\u0131mlamalar\u0131 olu\u015fturmam\u0131z\u0131 sa\u011flar.<\/p>\n<h3>Generic Tip Takma Adlar\u0131<\/h3>\n<p>Genericler, bir fonksiyonun, s\u0131n\u0131f\u0131n veya tipin herhangi bir tip \u00fczerinde \u00e7al\u0131\u015fabilmesini sa\u011flayan &#8220;yer tutucu&#8221; tiplerdir. Tip takma adlar\u0131 ile genericleri kullanarak, farkl\u0131 tipler i\u00e7in yeniden kullan\u0131labilir ve esnek tip tan\u0131mlamalar\u0131 olu\u015fturabiliriz.<\/p>\n<h4>Neden Genericlere \u0130htiya\u00e7 Duyar\u0131z?<\/h4>\n<p>Bir veri yap\u0131s\u0131n\u0131 (\u00f6rne\u011fin bir liste veya kuyruk) farkl\u0131 tiplerdeki \u00f6\u011felerle kullanmak istedi\u011fimizde, her tip i\u00e7in ayr\u0131 bir tip tan\u0131mlamak yerine generic bir tan\u0131m yapmak DRY (Don&#8217;t Repeat Yourself) prensibine uymam\u0131z\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-typescript\">\/\/ Generic olmayan bir \u00f6rnek (k\u00f6t\u00fc pratik)\ntype StringListesi = string[];\ntype NumberListesi = number[];\n\n\/\/ Generic ile daha iyi bir \u00e7\u00f6z\u00fcm\ntype Liste<T> = T[];\n\nconst metinler: Liste<string> = [\"a\", \"b\", \"c\"];\nconst rakamlar: Liste<number> = [1, 2, 3];\nconst kullan\u0131c\u0131lar: Liste<Kullan\u0131c\u0131Bilgisi> = [{ id: \"u1\", ad: \"Ay\u015fe\", soyad: \"Demir\" }];<\/code><\/pre>\n<p>Burada <code>Liste<T><\/code> generic tip takma ad\u0131, <code>T<\/code> tipinde \u00f6\u011feler i\u00e7eren bir dizi tan\u0131mlar. <code>T<\/code>, tip takma ad\u0131n\u0131 kullan\u0131rken belirleyece\u011fimiz herhangi bir tip olabilir.<\/p>\n<h4><code>extends<\/code> Anahtar Kelimesi ile K\u0131s\u0131tlamalar (Constraints)<\/h4>\n<p>Bazen generic tipler \u00fczerinde belirli k\u0131s\u0131tlamalar uygulamak isteriz. \u00d6rne\u011fin, sadece belirli \u00f6zelliklere sahip nesnelerle \u00e7al\u0131\u015fmas\u0131n\u0131 istedi\u011fimiz bir generic tip tan\u0131mlayabiliriz.<\/p>\n<pre><code class=\"language-typescript\">type KimlikliNesne = { id: string };\n\ntype Kay\u0131t<T extends KimlikliNesne> = T & {\n  olu\u015fturulmaTarihi: Date;\n  sonG\u00fcncellemeTarihi: Date;\n};\n\ntype \u00dcr\u00fcnKay\u0131t = Kay\u0131t<\u00dcr\u00fcn>; \/\/ \u00dcr\u00fcn, KimlikliNesne'yi extends etti\u011fi i\u00e7in ge\u00e7erli\n\nconst yeni\u00dcr\u00fcn: \u00dcr\u00fcnKay\u0131t = {\n  id: \"p-003\",\n  isim: \"Klavye\",\n  fiyat: 250,\n  stokKodu: \"KLV-123\",\n  olu\u015fturulmaTarihi: new Date(),\n  sonG\u00fcncellemeTarihi: new Date(),\n};\n\n\/\/ type SadeceStringKay\u0131t = Kay\u0131t<string>; \/\/ Hata: 'string' tipi 'KimlikliNesne' ile k\u0131s\u0131tlanamaz.<\/code><\/pre>\n<p><code>Kay\u0131t<T extends KimlikliNesne><\/code> tan\u0131m\u0131, <code>T<\/code>&#8216;nin mutlaka <code>id: string<\/code> \u00f6zelli\u011fine sahip bir nesne olmas\u0131 gerekti\u011fini belirtir.<\/p>\n<h3>Ko\u015fullu Tipler (Conditional Types) ile Kullan\u0131m<\/h3>\n<p>Ko\u015fullu tipler, bir tipin ba\u015fka bir tipe atanabilirli\u011fine (assignability) ba\u011fl\u0131 olarak farkl\u0131 tipler se\u00e7menizi sa\u011flar. <code>extends<\/code> anahtar kelimesi ve \u00fc\u00e7l\u00fc operat\u00f6r (<code>? :<\/code>) kullan\u0131larak tan\u0131mlan\u0131rlar.<\/p>\n<pre><code class=\"language-typescript\">type IsString<T> = T extends string ? true : false;\n\ntype A = IsString<\"hello\">; \/\/ type A = true\ntype B = IsString<number>;  \/\/ type B = false\n\ntype GetReturnType<T> = T extends (...args: any[]) => infer R ? R : any;\n\ntype Func1 = () => string;\ntype Func2 = (x: number) => boolean;\n\ntype Return1 = GetReturnType<Func1>; \/\/ type Return1 = string\ntype Return2 = GetReturnType<Func2>; \/\/ type Return2 = boolean\ntype Return3 = GetReturnType<number>; \/\/ type Return3 = any<\/code><\/pre>\n<p><code>infer<\/code> anahtar kelimesi, bir ko\u015fullu tipin <code>extends<\/code> k\u0131sm\u0131nda bir tipi \u00e7\u0131karman\u0131z\u0131 (infer) ve bu \u00e7\u0131kar\u0131lan tipi ko\u015fulun do\u011fru veya yanl\u0131\u015f k\u0131sm\u0131nda kullanman\u0131z\u0131 sa\u011flar. <code>GetReturnType<\/code> \u00f6rne\u011fi, bir fonksiyonun d\u00f6n\u00fc\u015f tipini \u00e7\u0131karmak i\u00e7in <code>infer R<\/code> kullan\u0131r.<\/p>\n<h3>E\u015flemeli Tipler (Mapped Types) ile Kullan\u0131m<\/h3>\n<p>E\u015flemeli tipler, mevcut bir tipin \u00f6zelliklerini al\u0131p her birine belirli d\u00f6n\u00fc\u015f\u00fcmler uygulayarak yeni bir tip olu\u015fturman\u0131z\u0131 sa\u011flar. Bu, \u00f6zellikle mevcut tiplerden yeni t\u00fcretilmi\u015f tipler olu\u015fturmak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-typescript\">type \u00d6zellikler = 'ad' | 'soyad' | 'email';\n\ntype SaltOkunur<T> = {\n  readonly [P in keyof T]: T[P];\n};\n\ntype \u0130ste\u011feBa\u011fl\u0131<T> = {\n  [P in keyof T]?: T[P];\n};\n\ntype Kullan\u0131c\u0131Profiller = {\n  id: string;\n  ad: string;\n  email: string;\n};\n\ntype ReadonlyKullan\u0131c\u0131 = SaltOkunur<Kullan\u0131c\u0131Profiller>;\n\/\/ type ReadonlyKullan\u0131c\u0131 = {\n\/\/   readonly id: string;\n\/\/   readonly ad: string;\n\/\/   readonly email: string;\n\/\/ }\n\ntype PartialKullan\u0131c\u0131 = \u0130ste\u011feBa\u011fl\u0131<Kullan\u0131c\u0131Profiller>;\n\/\/ type PartialKullan\u0131c\u0131 = {\n\/\/   id?: string;\n\/\/   ad?: string;\n\/\/   email?: string;\n\/\/ }<\/code><\/pre>\n<p><code>[P in keyof T]: T[P]<\/code> yap\u0131s\u0131, <code>T<\/code> tipinin her bir \u00f6zelli\u011fini (anahtar\u0131n\u0131) <code>P<\/code> de\u011fi\u015fkenine atar ve bu \u00f6zelli\u011fin tipini <code>T[P]<\/code> olarak kullan\u0131r. <code>+readonly<\/code> ve <code>+?<\/code> gibi operat\u00f6rlerle \u00f6zelliklere modifier&#8217;lar ekleyebilir veya kald\u0131rabiliriz. TypeScript&#8217;in yerle\u015fik <code>Partial<\/code>, <code>Readonly<\/code>, <code>Pick<\/code>, <code>Omit<\/code> gibi utility tipleri de e\u015flemeli tipler kullan\u0131larak tan\u0131mlanm\u0131\u015ft\u0131r.<\/p>\n<h3>\u015eablon Literali Tipleri (Template Literal Types) ile Kullan\u0131m<\/h3>\n<p>TypeScript 4.1 ile tan\u0131t\u0131lan \u015fablon literal tipleri, string literal tipleri \u00fczerinde kal\u0131p e\u015fle\u015ftirme ve birle\u015ftirme yapman\u0131z\u0131 sa\u011flar. Tip takma adlar\u0131 ile bu g\u00fc\u00e7l\u00fc \u00f6zelli\u011fi kullanarak dinamik string tipleri olu\u015fturabiliriz.<\/p>\n<pre><code class=\"language-typescript\">type OlayTipi = 'click' | 'hover' | 'focus';\ntype OlayY\u00f6neticisiAd\u0131<T extends OlayTipi> = <code>on${Capitalize<T>}Handler<\/code>;\n\ntype ClickHandler = OlayY\u00f6neticisiAd\u0131<'click'>;  \/\/ type ClickHandler = \"onClickHandler\"\ntype HoverHandler = OlayY\u00f6neticisiAd\u0131<'hover'>;  \/\/ type HoverHandler = \"onHoverHandler\"\n\n\/\/ Ba\u015fka bir \u00f6rnek: API endpointleri\ntype HTTPMetod = 'GET' | 'POST' | 'PUT' | 'DELETE';\ntype APIEndpoint<T extends string> = <code>\/api\/${T}<\/code>;\n\ntype UserEndpoint = APIEndpoint<'users'>; \/\/ type UserEndpoint = \"\/api\/users\"\ntype ProductEndpoint = APIEndpoint<'products'>; \/\/ type ProductEndpoint = \"\/api\/products\"\ntype UserDetailEndpoint<ID extends string> = APIEndpoint<<code>users\/${ID}<\/code>>;\n\ntype SpecificUserEndpoint = UserDetailEndpoint<'123'>; \/\/ type SpecificUserEndpoint = \"\/api\/users\/123\"<\/code><\/pre>\n<p><code>Capitalize<T><\/code> gibi utility tipler, string literal tipleri \u00fczerinde b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf d\u00f6n\u00fc\u015f\u00fcmleri yapmam\u0131z\u0131 sa\u011flar. Bu \u00f6zellik, \u00f6zellikle dinamik API yollar\u0131, olay isimleri veya CSS s\u0131n\u0131f adlar\u0131 olu\u015ftururken \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h2>Tip Takma Adlar\u0131 ve Aray\u00fczler (Interfaces) Kar\u015f\u0131la\u015ft\u0131rmas\u0131<\/h2>\n<p>TypeScript&#8217;te nesne tiplerini tan\u0131mlamak i\u00e7in hem tip takma adlar\u0131 (<code>type<\/code>) hem de aray\u00fczler (<code>interface<\/code>) kullan\u0131labilir. Her ikisi de benzer ama\u00e7lara hizmet etse de, aralar\u0131nda \u00f6nemli farklar ve belirli kullan\u0131m senaryolar\u0131na uygunluklar\u0131 vard\u0131r.<\/p>\n<h3>Benzerlikler<\/h3>\n<p>*   <strong>Nesne Tipleri Tan\u0131mlama:<\/strong> Her ikisi de nesne \u015fekillerini tan\u0131mlamak i\u00e7in kullan\u0131labilir.<\/p>\n<pre><code class=\"language-typescript\">type Kullan\u0131c\u0131Tipi = {\n      ad: string;\n      ya\u015f: number;\n    };\n\n    interface Kullan\u0131c\u0131Aray\u00fcz\u00fc {\n      ad: string;\n      ya\u015f: number;\n    }\n\n    const kullan\u0131c\u01311: Kullan\u0131c\u0131Tipi = { ad: \"Can\", ya\u015f: 30 };\n    const kullan\u0131c\u01312: Kullan\u0131c\u0131Aray\u00fcz\u00fc = { ad: \"Deniz\", ya\u015f: 25 };<\/code><\/pre>\n<p>*   <strong>Geni\u015fletilebilirlik (Extensibility):<\/strong> Her ikisi de di\u011fer tipleri geni\u015fletebilir.<br \/>\n    *   <code>interface<\/code> i\u00e7in <code>extends<\/code> anahtar kelimesi kullan\u0131l\u0131r.<br \/>\n    *   <code>type<\/code> i\u00e7in <code>&<\/code> (intersection) operat\u00f6r\u00fc kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-typescript\">\/\/ Interface geni\u015fletme\n    interface PersonelAray\u00fcz\u00fc extends Kullan\u0131c\u0131Aray\u00fcz\u00fc {\n      departman: string;\n    }\n\n    \/\/ Type geni\u015fletme\n    type PersonelTipi = Kullan\u0131c\u0131Tipi & {\n      departman: string;\n    };<\/code><\/pre>\n<p>*   <strong>Generic Kullan\u0131m:<\/strong> Her ikisi de generic tiplerle kullan\u0131labilir.<\/p>\n<pre><code class=\"language-typescript\">interface KutuAray\u00fcz\u00fc<T> {\n      i\u00e7erik: T;\n    }\n\n    type KutuTipi<T> = {\n      i\u00e7erik: T;\n    };<\/code><\/pre>\n<h3>Farkl\u0131l\u0131klar<\/h3>\n<p>1.  <strong>Declaration Merging (Bildirim Birle\u015ftirme):<\/strong> Bu, aray\u00fczlerin en \u00f6nemli ve benzersiz \u00f6zelli\u011fidir. Ayn\u0131 isimle birden fazla <code>interface<\/code> tan\u0131mland\u0131\u011f\u0131nda, TypeScript bunlar\u0131 otomatik olarak tek bir aray\u00fczde birle\u015ftirir. <code>type<\/code> takma adlar\u0131 i\u00e7in bu \u00f6zellik yoktur; ayn\u0131 isimle birden fazla <code>type<\/code> tan\u0131mlamak hataya neden olur.<\/p>\n<pre><code class=\"language-typescript\">\/\/ Interface i\u00e7in Declaration Merging\n    interface Ayarlar {\n      tema: string;\n    }\n\n    interface Ayarlar { \/\/ Ayarlar aray\u00fcz\u00fcne yeni \u00f6zellik eklendi\n      dil: string;\n    }\n\n    const uygulamaAyarlar\u0131: Ayarlar = {\n      tema: \"koyu\",\n      dil: \"tr\", \/\/ Hem 'tema' hem de 'dil' \u00f6zellikleri mevcut\n    };\n\n    \/\/ Type i\u00e7in Hata\n    \/\/ type AyarlarType = { tema: string; };\n    \/\/ type AyarlarType = { dil: string; }; \/\/ Hata: Duplicate identifier 'AyarlarType'.<\/code><\/pre>\n<p>    Bu \u00f6zellik, \u00f6zellikle k\u00fct\u00fcphane yazarken veya mevcut tiplere yeni \u00f6zellikler eklemek istedi\u011finizde (\u00f6rne\u011fin, global bir nesneye veya \u00fc\u00e7\u00fcnc\u00fc taraf bir mod\u00fcle) \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<p>2.  <strong><code>implements<\/code> Anahtar Kelimesi:<\/strong> Sadece <code>interface<\/code>&#8216;ler bir s\u0131n\u0131f taraf\u0131ndan <code>implements<\/code> edilebilir. <code>type<\/code> takma adlar\u0131 do\u011frudan bir s\u0131n\u0131f taraf\u0131ndan implement edilemez.<\/p>\n<pre><code class=\"language-typescript\">interface \u00c7al\u0131\u015ft\u0131r\u0131labilir {\n      \u00e7al\u0131\u015ft\u0131r(): void;\n    }\n\n    class G\u00f6rev implements \u00c7al\u0131\u015ft\u0131r\u0131labilir {\n      \u00e7al\u0131\u015ft\u0131r() {\n        console.log(\"G\u00f6rev \u00e7al\u0131\u015f\u0131yor...\");\n      }\n    }\n\n    \/\/ type \u00c7al\u0131\u015ft\u0131r\u0131labilirType = { \u00e7al\u0131\u015ft\u0131r(): void; };\n    \/\/ class G\u00f6rev2 implements \u00c7al\u0131\u015ft\u0131r\u0131labilirType { ... } \/\/ Hata: A class can only implement an object type or intersection of object types with statically known members.<\/code><\/pre>\n<p>3.  <strong>Di\u011fer Tip T\u00fcrlerini Tan\u0131mlama:<\/strong> <code>type<\/code> takma adlar\u0131, aray\u00fczlerin yapamad\u0131\u011f\u0131 union, intersection, ilkel tipler, tuple&#8217;lar, fonksiyon tipleri ve e\u015flemeli tipler gibi di\u011fer tip t\u00fcrlerini de tan\u0131mlayabilir. Aray\u00fczler ise yaln\u0131zca nesne \u015fekillerini tan\u0131mlayabilir.<\/p>\n<pre><code class=\"language-typescript\">\/\/ Type ile m\u00fcmk\u00fcn olanlar:\n    type ID = string | number; \/\/ Union\n    type Nokta = [number, number]; \/\/ Tuple\n    type FonksiyonTipi = (a: number, b: number) => number; \/\/ Fonksiyon tipi\n    type \u0130ste\u011feBa\u011fl\u0131Nesne<T> = { [K in keyof T]?: T[K] }; \/\/ Mapped Type\n\n    \/\/ Interface ile m\u00fcmk\u00fcn olmayanlar (do\u011frudan):\n    \/\/ interface IDInterface = string | number; \/\/ Hata\n    \/\/ interface NoktaInterface = [number, number]; \/\/ Hata<\/code><\/pre>\n<h3>Ne Zaman Hangisini Kullanmal\u0131?<\/h3>\n<p>*   <strong><code>interface<\/code> kullan\u0131n:<\/strong><br \/>\n    *   Bir nesnenin \u015feklini tan\u0131mlamak istedi\u011finizde ve bu \u015feklin <code>declaration merging<\/code> \u00f6zelli\u011finden faydalanmak istedi\u011finizde (\u00f6zellikle k\u00fct\u00fcphane geli\u015ftirirken veya d\u0131\u015f mod\u00fcllere eklemeler yaparken).<br \/>\n    *   Bir s\u0131n\u0131f taraf\u0131ndan implement edilecek bir s\u00f6zle\u015fme tan\u0131mlad\u0131\u011f\u0131n\u0131zda.<br \/>\n    *   Performans a\u00e7\u0131s\u0131ndan hafif bir avantaj (\u00e7ok k\u00fc\u00e7\u00fck, genellikle \u00f6nemsiz) sa\u011flayabilir, ancak bu genellikle birincil karar fakt\u00f6r\u00fc de\u011fildir.<br \/>\n*   <strong><code>type<\/code> kullan\u0131n:<\/strong><br \/>\n    *   Union tipleri (<code>string | number<\/code>), intersection tipleri (<code>A & B<\/code>), ilkel tipler (<code>type ID = string<\/code>), tuple&#8217;lar (<code>[string, number]<\/code>) veya fonksiyon tipleri (<code>(arg: string) => void<\/code>) gibi nesne d\u0131\u015f\u0131ndaki tip t\u00fcrlerini tan\u0131mlaman\u0131z gerekti\u011finde.<br \/>\n    *   E\u015flemeli tipler (Mapped Types) veya ko\u015fullu tipler (Conditional Types) gibi geli\u015fmi\u015f tip manip\u00fclasyonlar\u0131 yapt\u0131\u011f\u0131n\u0131zda.<br \/>\n    *   Bir tipin yeniden adland\u0131r\u0131lmas\u0131 veya basitle\u015ftirilmesi gerekti\u011finde.<\/p>\n<p>Genel bir kural olarak, e\u011fer bir nesnenin \u015feklini tan\u0131ml\u0131yorsan\u0131z ve <code>declaration merging<\/code>&#8216;e ihtiyac\u0131n\u0131z yoksa, her ikisi de iyi bir se\u00e7imdir. Ancak, bir aray\u00fcz\u00fcn \u00f6zelliklerini a\u015fan karma\u015f\u0131k tip manip\u00fclasyonlar\u0131na ihtiyac\u0131n\u0131z varsa, <code>type<\/code> takma adlar\u0131 daha esnek bir \u00e7\u00f6z\u00fcm sunar. \u00c7o\u011fu modern TypeScript projesinde, her iki \u00f6zellik de bir arada ve uyumlu bir \u015fekilde kullan\u0131l\u0131r.<\/p>\n<h2>En \u0130yi Uygulamalar ve \u0130pu\u00e7lar\u0131<\/h2>\n<p>Tip takma adlar\u0131n\u0131 etkili bir \u015fekilde kullanmak, kodunuzun kalitesini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. \u0130\u015fte baz\u0131 en iyi uygulamalar ve ipu\u00e7lar\u0131:<\/p>\n<p>*   <strong>Anlaml\u0131 \u0130simler Kullan\u0131n:<\/strong> Tip takma adlar\u0131n\u0131z, neyi temsil ettiklerini a\u00e7\u0131k\u00e7a belirtmelidir. \u00d6rne\u011fin, <code>Kullan\u0131c\u0131Verisi<\/code> yerine <code>KV<\/code> kullanmak okunabilirli\u011fi azalt\u0131r.<br \/>\n*   <strong>Mod\u00fclerlik ve Yeniden Kullan\u0131labilirlik:<\/strong> S\u0131k\u00e7a kullan\u0131lan veya karma\u015f\u0131k tipleri tip takma adlar\u0131 alt\u0131nda toplayarak kod tekrar\u0131n\u0131 \u00f6nleyin ve mod\u00fclerli\u011fi art\u0131r\u0131n. \u00d6rne\u011fin, bir API yan\u0131t\u0131n\u0131n farkl\u0131 yerlerde kullan\u0131lmas\u0131 gerekiyorsa, bu yan\u0131t\u0131n tipini bir takma ad olarak tan\u0131mlay\u0131n.<br \/>\n*   <strong>A\u015f\u0131r\u0131 Karma\u015f\u0131k Tip Takma Adlar\u0131ndan Ka\u00e7\u0131n\u0131n:<\/strong> Bazen bir tip takma ad\u0131 o kadar karma\u015f\u0131k hale gelebilir ki, okunmas\u0131 ve anla\u015f\u0131lmas\u0131 zorla\u015f\u0131r. Bu durumda, daha k\u00fc\u00e7\u00fck, daha y\u00f6netilebilir par\u00e7alara ay\u0131rmay\u0131 d\u00fc\u015f\u00fcn\u00fcn.<br \/>\n*   <strong>Belgeleme:<\/strong> \u00d6zellikle karma\u015f\u0131k veya generic tip takma adlar\u0131 i\u00e7in <code>JSDoc<\/code> yorumlar\u0131 kullanarak ne i\u015fe yarad\u0131klar\u0131n\u0131, beklenen parametreleri ve d\u00f6n\u00fc\u015f de\u011ferlerini a\u00e7\u0131klay\u0131n. Bu, di\u011fer geli\u015ftiricilerin (ve gelecekteki sizin) kodunuzu anlamas\u0131na yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<pre><code class=\"language-typescript\">\/<em><\/em>\n     * Belirli bir ID'ye sahip herhangi bir nesneyi temsil eder.\n     * @template T - Nesnenin tipi.\n     * @property {string} id - Nesnenin benzersiz tan\u0131mlay\u0131c\u0131s\u0131.\n     *\/\n    type KimlikliNesne<T> = {\n      id: string;\n      veri: T;\n    };<\/code><\/pre>\n<p>*   <strong>Tutarl\u0131l\u0131k:<\/strong> Projenizde <code>type<\/code> veya <code>interface<\/code> kullan\u0131m\u0131nda tutarl\u0131 bir yakla\u015f\u0131m benimseyin. Birini tercih ettiyseniz, \u00f6zel durumlar d\u0131\u015f\u0131nda di\u011ferini kullanmaktan ka\u00e7\u0131n\u0131n.<\/p>\n<h2>S\u0131k\u00e7a Yap\u0131lan Hatalar<\/h2>\n<p>Tip takma adlar\u0131 g\u00fc\u00e7l\u00fc bir ara\u00e7 olsa da, yanl\u0131\u015f kullan\u0131mlar\u0131 baz\u0131 yayg\u0131n hatalara yol a\u00e7abilir:<\/p>\n<p>*   <strong>Aray\u00fcz ve Tip Takma Adlar\u0131 Aras\u0131nda Yanl\u0131\u015f Se\u00e7im:<\/strong> Yukar\u0131da detayl\u0131 olarak bahsetti\u011fimiz farklar\u0131 g\u00f6z ard\u0131 ederek, yanl\u0131\u015f arac\u0131 se\u00e7mek beklenmedik davran\u0131\u015flara veya gereksiz k\u0131s\u0131tlamalara yol a\u00e7abilir. \u00d6zellikle <code>declaration merging<\/code> veya <code>implements<\/code> ihtiyac\u0131 oldu\u011funda <code>interface<\/code> kullanmamak hatad\u0131r.<br \/>\n*   <strong>A\u015f\u0131r\u0131 Genelleme veya A\u015f\u0131r\u0131 Spesifikasyon:<\/strong> Bir tipi \u00e7ok genel (<code>any<\/code> veya <code>unknown<\/code> gibi) veya \u00e7ok spesifik tan\u0131mlamak, esnekli\u011fi azalt\u0131r veya tip g\u00fcvenli\u011fini tehlikeye atar. \u0130htiya\u00e7 duyulan seviyede bir denge bulunmal\u0131d\u0131r.<br \/>\n*   <strong>Performans Kayg\u0131lar\u0131:<\/strong> Tip takma adlar\u0131 (ve genel olarak TypeScript tipleri), sadece derleme zaman\u0131nda (compile-time) var olan yap\u0131lard\u0131r. \u00c7al\u0131\u015fma zaman\u0131nda (runtime) herhangi bir JavaScript kodu \u00fcretmezler ve bu nedenle uygulaman\u0131z\u0131n performans\u0131na hi\u00e7bir etkisi yoktur. Bu nedenle, performans endi\u015fesiyle tip takma adlar\u0131n\u0131 kullanmaktan ka\u00e7\u0131nmak yersizdir.<br \/>\n*   <strong>Dairesel Tip Referanslar\u0131:<\/strong> Bir tipin dolayl\u0131 olarak kendini referans g\u00f6stermesi, genellikle sonsuz d\u00f6ng\u00fclere veya derleme hatalar\u0131na yol a\u00e7abilir. TypeScript derleyicisi bu t\u00fcr durumlar\u0131 yakalamaya \u00e7al\u0131\u015fsa da, karma\u015f\u0131k yap\u0131larda g\u00f6zden ka\u00e7abilir.<\/p>\n<pre><code class=\"language-typescript\">\/\/ Hatal\u0131 dairesel referans \u00f6rne\u011fi\n    \/\/ type Node = {\n    \/\/   value: number;\n    \/\/   next: Node; \/\/ Hata: Type alias 'Node' circularly references itself.\n    \/\/ };\n\n    \/\/ Do\u011fru yakla\u015f\u0131m (genellikle iste\u011fe ba\u011fl\u0131 veya union ile)\n    type Node = {\n      value: number;\n      next?: Node; \/\/ next \u00f6zelli\u011fi iste\u011fe ba\u011fl\u0131\n    };\n\n    type LinkedList = Node | null; \/\/ veya null ile birle\u015ftirme<\/code><\/pre>\n<h2>Sonu\u00e7<\/h2>\n<p>TypeScript&#8217;teki tip takma adlar\u0131, modern ve b\u00fcy\u00fck \u00f6l\u00e7ekli uygulamalar\u0131n geli\u015ftirilmesinde vazge\u00e7ilmez bir ara\u00e7t\u0131r. Kodun okunabilirli\u011fini, bak\u0131m\u0131n\u0131 ve yeniden kullan\u0131labilirli\u011fini art\u0131rarak geli\u015ftirme s\u00fcrecini daha verimli hale getirir. Temel ilkel tiplerden karma\u015f\u0131k nesne yap\u0131lar\u0131na, genericlerden ko\u015fullu ve e\u015flemeli tiplere kadar geni\u015f bir kullan\u0131m yelpazesi sunar.<\/p>\n<p>Aray\u00fczlerle olan benzerlikleri ve farkl\u0131l\u0131klar\u0131 anlamak, hangi arac\u0131 ne zaman kullanaca\u011f\u0131n\u0131za karar vermenizde size yol g\u00f6sterecektir. <code>type<\/code> takma adlar\u0131, \u00f6zellikle union, intersection, tuple gibi nesne d\u0131\u015f\u0131 tipleri tan\u0131mlama ve geli\u015fmi\u015f tip manip\u00fclasyonlar\u0131 yapma konusunda aray\u00fczlerden daha esnektir.<\/p>\n<p>Bu makalede ele al\u0131nan kavramlar\u0131 ve \u00f6rnekleri uygulayarak, TypeScript projelerinizde daha sa\u011flam, anla\u015f\u0131l\u0131r ve hatas\u0131z kodlar yazabilirsiniz. Tip takma adlar\u0131n\u0131 ustaca kullanmak, tip sisteminin t\u00fcm g\u00fcc\u00fcnden faydalanman\u0131z\u0131 sa\u011flayacak ve TypeScript ile geli\u015ftirme deneyiminizi \u00f6nemli \u00f6l\u00e7\u00fcde zenginle\u015ftirecektir. Unutmay\u0131n, iyi yaz\u0131lm\u0131\u015f tipler, kodunuzun kendisi kadar \u00f6nemlidir.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"TypeScript&#8217;te Tip Takma Adlar\u0131 (Type Aliases) Nas\u0131l Kullan\u0131l\u0131r?\nGiri\u015f\nModern web uygulamalar\u0131n\u0131n karma\u015f\u0131kl\u0131\u011f\u0131 artt\u0131k\u00e7a, geli\u015ftiricil","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-38412","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>TypeScript&#039;te Tip Takma Adlar\u0131 (Type Aliases) Nas\u0131l Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"TypeScript&#039;te Tip Takma Adlar\u0131 (Type Aliases) Nas\u0131l Kullan\u0131l\u0131r?\" \/>\n<meta property=\"og:description\" content=\"TypeScript&#039;te Tip Takma Adlar\u0131 (Type Aliases) Nas\u0131l Kullan\u0131l\u0131r? Giri\u015f Modern web uygulamalar\u0131n\u0131n karma\u015f\u0131kl\u0131\u011f\u0131 artt\u0131k\u00e7a, geli\u015ftiricil\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-30T13:41:01+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"TypeScript&#8217;te Tip Takma Adlar\u0131 (Type Aliases) Nas\u0131l Kullan\u0131l\u0131r?\",\"datePublished\":\"2026-01-30T13:41:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/\"},\"wordCount\":2258,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/\",\"name\":\"TypeScript'te Tip Takma Adlar\u0131 (Type Aliases) Nas\u0131l Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-30T13:41:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"TypeScript&#8217;te Tip Takma Adlar\u0131 (Type Aliases) Nas\u0131l Kullan\u0131l\u0131r?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"TypeScript'te Tip Takma Adlar\u0131 (Type Aliases) Nas\u0131l Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/","og_locale":"tr_TR","og_type":"article","og_title":"TypeScript'te Tip Takma Adlar\u0131 (Type Aliases) Nas\u0131l Kullan\u0131l\u0131r?","og_description":"TypeScript'te Tip Takma Adlar\u0131 (Type Aliases) Nas\u0131l Kullan\u0131l\u0131r? Giri\u015f Modern web uygulamalar\u0131n\u0131n karma\u015f\u0131kl\u0131\u011f\u0131 artt\u0131k\u00e7a, geli\u015ftiricil","og_url":"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-30T13:41:01+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"17 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"TypeScript&#8217;te Tip Takma Adlar\u0131 (Type Aliases) Nas\u0131l Kullan\u0131l\u0131r?","datePublished":"2026-01-30T13:41:01+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/"},"wordCount":2258,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/","url":"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/","name":"TypeScript'te Tip Takma Adlar\u0131 (Type Aliases) Nas\u0131l Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-30T13:41:01+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/typescriptte-tip-takma-adlari-type-aliases-nasil-kullanilir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"TypeScript&#8217;te Tip Takma Adlar\u0131 (Type Aliases) Nas\u0131l Kullan\u0131l\u0131r?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38412","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=38412"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38412\/revisions"}],"predecessor-version":[{"id":38413,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38412\/revisions\/38413"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=38412"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=38412"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=38412"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}