{"id":34450,"date":"2025-11-16T21:40:48","date_gmt":"2025-11-16T18:40:48","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=34450"},"modified":"2025-11-16T21:40:48","modified_gmt":"2025-11-16T18:40:48","slug":"typescriptte-string-literal-tipleri-detayli-bir-inceleme","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/","title":{"rendered":"TypeScript&#8217;te String Literal Tipleri: Detayl\u0131 Bir \u0130nceleme"},"content":{"rendered":"<p><body><\/p>\n<h2>TypeScript&#8217;te String Literal Tipleri: Detayl\u0131 Bir \u0130nceleme<\/h2>\n<h3>Giri\u015f: TypeScript ve Geli\u015fmi\u015f Tip G\u00fcvenli\u011fi<\/h3>\n<p>Modern web geli\u015ftirme d\u00fcnyas\u0131nda, \u00f6l\u00e7eklenebilir ve bak\u0131m\u0131 kolay uygulamalar olu\u015fturmak giderek daha karma\u015f\u0131k hale gelmektedir. JavaScript&#8217;in dinamik ve esnek yap\u0131s\u0131, h\u0131zl\u0131 prototipleme ve geli\u015ftirme i\u00e7in harika olsa da, b\u00fcy\u00fck projelerde veya ekip \u00e7al\u0131\u015fmalar\u0131nda tip g\u00fcvenli\u011fi eksikli\u011fi hatalara, yanl\u0131\u015f anlamalara ve bak\u0131m zorluklar\u0131na yol a\u00e7abilir. \u0130\u015fte bu noktada TypeScript devreye girer. JavaScript&#8217;in bir \u00fcst k\u00fcmesi olan TypeScript, statik tip denetimi sa\u011flayarak kodun daha \u00f6ng\u00f6r\u00fclebilir, g\u00fcvenli ve anla\u015f\u0131l\u0131r olmas\u0131n\u0131 hedefler. Geli\u015ftiricilerin derleme zaman\u0131nda potansiyel hatalar\u0131 yakalamas\u0131na, daha iyi IDE deste\u011fi almas\u0131na ve kod taban\u0131n\u0131 daha g\u00fcvenle yeniden d\u00fczenlemesine olanak tan\u0131r.<\/p>\n<p>TypeScript&#8217;in sundu\u011fu tip sisteminin en g\u00fc\u00e7l\u00fc ve s\u0131kl\u0131kla g\u00f6z ard\u0131 edilen \u00f6zelliklerinden biri de &#8220;String Literal Tipleri&#8221;dir. Temel <code>string<\/code> tipinin \u00f6tesine ge\u00e7erek, bir de\u011fi\u015fkenin veya \u00f6zelli\u011fin alabilece\u011fi de\u011ferleri belirli, sabit string&#8217;lerle s\u0131n\u0131rlamam\u0131z\u0131 sa\u011flarlar. Bu makalede, String Literal Tiplerinin ne oldu\u011funu, neden bu kadar \u00f6nemli olduklar\u0131n\u0131, \u00e7e\u015fitli kullan\u0131m senaryolar\u0131n\u0131, geli\u015fmi\u015f teknikleri ve TypeScript projelerinizde nas\u0131l en iyi \u015fekilde kullanabilece\u011finizi ayr\u0131nt\u0131l\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h3>String Literal Tipleri Nedir?<\/h3>\n<p>TypeScript&#8217;te, bir &#8220;literal tip&#8221;, bir de\u011fi\u015fkenin veya ifadenin alabilece\u011fi tam ve kesin de\u011feri temsil eden bir tiptir. \u00d6rne\u011fin, <code>5<\/code> bir number literal tipi, <code>true<\/code> bir boolean literal tipi ve <code>\"hello\"<\/code> bir string literal tipidir.<\/p>\n<p>String literal tipleri, belirli bir string de\u011ferini ifade eden tiplerdir. \u00d6rne\u011fin:<\/p>\n<pre><code class=\"language-typescript\">type Status = \"success\";\nlet currentStatus: Status = \"success\"; \/\/ Ge\u00e7erli\n\/\/ let invalidStatus: Status = \"error\"; \/\/ Hata: 'error' tipi 'success' tipine atanamaz.<\/code><\/pre>\n<p>Tek bir string literal tipi tek ba\u015f\u0131na \u00e7ok g\u00fc\u00e7l\u00fc g\u00f6r\u00fcnmeyebilir. Ancak ger\u00e7ek g\u00fcc\u00fc, birden fazla string literal tipini birle\u015fim (union) tipleriyle birle\u015ftirdi\u011fimizde ortaya \u00e7\u0131kar.<\/p>\n<pre><code class=\"language-typescript\">type TrafficLightColor = \"red\" | \"yellow\" | \"green\";\n\nlet light1: TrafficLightColor = \"red\";    \/\/ Ge\u00e7erli\nlet light2: TrafficLightColor = \"yellow\"; \/\/ Ge\u00e7erli\n\/\/ let light3: TrafficLightColor = \"blue\";  \/\/ Hata: 'blue' tipi 'TrafficLightColor' tipine atanamaz.<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>TrafficLightColor<\/code> tipi, sadece <code>\"red\"<\/code>, <code>\"yellow\"<\/code> veya <code>\"green\"<\/code> string de\u011ferlerini kabul eden \u00f6zel bir tiptir. Bu, <code>string<\/code> tipinden \u00e7ok daha k\u0131s\u0131tlay\u0131c\u0131 ve dolay\u0131s\u0131yla \u00e7ok daha g\u00fcvenlidir. <code>string<\/code> tipi, herhangi bir string de\u011ferini kabul ederken, string literal tipleri yaln\u0131zca belirtilen string de\u011ferlerini kabul eder.<\/p>\n<h3>Neden String Literal Tipleri Kullanmal\u0131y\u0131z?<\/h3>\n<p>String literal tiplerini kullanmak, kodunuzun kalitesini ve g\u00fcvenli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. \u0130\u015fte ba\u015fl\u0131ca nedenler:<\/p>\n<h4>1. Tip G\u00fcvenli\u011fini Art\u0131rma<\/h4>\n<p>En \u00f6nemli avantaj\u0131 tip g\u00fcvenli\u011fidir. Bir de\u011fi\u015fkenin alabilece\u011fi de\u011ferleri belirli string&#8217;lerle s\u0131n\u0131rlayarak, \u00e7al\u0131\u015fma zaman\u0131nda (runtime) ortaya \u00e7\u0131kabilecek hatalar\u0131n b\u00fcy\u00fck bir k\u0131sm\u0131n\u0131 derleme zaman\u0131nda (compile-time) yakalayabiliriz. Bu, yanl\u0131\u015f yaz\u0131lm\u0131\u015f string&#8217;lerden (typos) veya beklenmeyen de\u011ferlerden kaynaklanan hatalar\u0131 engeller.<\/p>\n<pre><code class=\"language-typescript\">function setAlignment(elementId: string, alignment: \"left\" | \"right\" | \"center\") {\n    \/\/ ... hizalama mant\u0131\u011f\u0131\n    console.log(<code>Element ${elementId} hizalama: ${alignment}<\/code>);\n}\n\nsetAlignment(\"myDiv\", \"left\");     \/\/ Ge\u00e7erli\n\/\/ setAlignment(\"myDiv\", \"lft\");    \/\/ Hata: 'lft' tipi '\"left\" | \"right\" | \"center\"' tipine atanamaz.\n\/\/ setAlignment(\"myDiv\", \"justify\"); \/\/ Hata: 'justify' tipi '\"left\" | \"right\" | \"center\"' tipine atanamaz.<\/code><\/pre>\n<h4>2. Geli\u015fmi\u015f IntelliSense ve Otomatik Tamamlama<\/h4>\n<p>Geli\u015ftirme ortamlar\u0131 (IDE&#8217;ler) ve kod edit\u00f6rleri (VS Code gibi), string literal tipleri sayesinde \u00e7ok daha iyi otomatik tamamlama (IntelliSense) deste\u011fi sunar. Bir fonksiyon parametresinin veya nesne \u00f6zelli\u011finin tipini tan\u0131mlad\u0131\u011f\u0131n\u0131zda, IDE size mevcut se\u00e7enekleri \u00f6nerir. Bu, geli\u015ftirici deneyimini iyile\u015ftirir ve hatalar\u0131 azalt\u0131r.<\/p>\n<pre><code class=\"language-typescript\">type ButtonVariant = \"primary\" | \"secondary\" | \"danger\";\n\nfunction renderButton(variant: ButtonVariant) {\n    \/\/ ...\n}\n\nrenderButton(\"pr\" \/\/ Burada 'primary', 'secondary', 'danger' se\u00e7enekleri otomatik olarak g\u00f6r\u00fcn\u00fcr.<\/code><\/pre>\n<h4>3. Kod Okunabilirli\u011fini ve Anla\u015f\u0131l\u0131rl\u0131\u011f\u0131n\u0131 Art\u0131rma<\/h4>\n<p>String literal tipleri, kodunuzu kendi kendini belgeleyen (self-documenting) hale getirir. Bir fonksiyonun hangi de\u011ferleri bekledi\u011fini veya bir nesne \u00f6zelli\u011finin hangi durumlar\u0131 temsil etti\u011fini a\u00e7\u0131k\u00e7a belirtirler. Bu, \u00f6zellikle yeni bir geli\u015ftiricinin projeye dahil olmas\u0131 veya eski kodu anlamaya \u00e7al\u0131\u015fmas\u0131 durumunda b\u00fcy\u00fck bir avantajd\u0131r.<\/p>\n<pre><code class=\"language-typescript\">interface UserSettings {\n    theme: \"light\" | \"dark\" | \"auto\";\n    language: \"tr\" | \"en\" | \"de\";\n}\n\nconst settings: UserSettings = {\n    theme: \"dark\",\n    language: \"tr\"\n};\n\/\/ Bu tan\u0131m, bir bak\u0131\u015fta ayarlar\u0131n hangi olas\u0131 de\u011ferleri alabilece\u011fini g\u00f6sterir.<\/code><\/pre>\n<h4>4. Refactoring ve Bak\u0131m Kolayl\u0131\u011f\u0131<\/h4>\n<p>E\u011fer bir string de\u011ferini de\u011fi\u015ftirmeye karar verirseniz (\u00f6rne\u011fin, &#8220;active&#8221; yerine &#8220;enabled&#8221; kullanmak gibi), string literal tiplerini kullanarak bu de\u011fi\u015fikli\u011fi tek bir yerde (<code>type<\/code> tan\u0131m\u0131nda) yapabilir ve TypeScript derleyicisinin size bu tipi kullanan t\u00fcm yerleri g\u00fcncellemeniz gerekti\u011fini bildirmesini sa\u011flayabilirsiniz. Bu, manuel arama ve de\u011fi\u015ftirme i\u015flemlerinden kaynaklanan hatalar\u0131 ortadan kald\u0131r\u0131r.<\/p>\n<h3>String Literal Tiplerinin Kullan\u0131m Senaryolar\u0131<\/h3>\n<p>String literal tipleri, TypeScript projelerinde \u00e7ok \u00e7e\u015fitli alanlarda kullan\u0131labilir. \u0130\u015fte baz\u0131 yayg\u0131n ve g\u00fc\u00e7l\u00fc kullan\u0131m senaryolar\u0131:<\/p>\n<h4>1. Fonksiyon Parametrelerini K\u0131s\u0131tlama<\/h4>\n<p>Bir fonksiyonun belirli string de\u011ferlerini parametre olarak kabul etmesini sa\u011flamak i\u00e7in kullan\u0131l\u0131r. Bu, fonksiyonun daha g\u00fcvenli ve \u00f6ng\u00f6r\u00fclebilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-typescript\">type OrderStatus = \"pending\" | \"processing\" | \"shipped\" | \"delivered\" | \"cancelled\";\n\nfunction updateOrderStatus(orderId: string, status: OrderStatus) {\n    console.log(<code>Sipari\u015f ${orderId} durumu g\u00fcncellendi: ${status}<\/code>);\n    \/\/ Veritaban\u0131 g\u00fcncelleme mant\u0131\u011f\u0131\n}\n\nupdateOrderStatus(\"ORD123\", \"shipped\"); \/\/ Ge\u00e7erli\n\/\/ updateOrderStatus(\"ORD456\", \"completed\"); \/\/ Hata: 'completed' tipi 'OrderStatus' tipine atanamaz.<\/code><\/pre>\n<h4>2. Nesne \u00d6zelliklerini Tan\u0131mlama<\/h4>\n<p>Bir nesnenin belirli \u00f6zelliklerinin alabilece\u011fi de\u011ferleri k\u0131s\u0131tlamak i\u00e7in idealdir.<\/p>\n<pre><code class=\"language-typescript\">interface Product {\n    id: string;\n    name: string;\n    category: \"electronics\" | \"clothing\" | \"books\" | \"home\";\n    availability: \"inStock\" | \"outOfStock\" | \"comingSoon\";\n}\n\nconst laptop: Product = {\n    id: \"LP101\",\n    name: \"UltraBook Pro\",\n    category: \"electronics\",\n    availability: \"inStock\"\n};\n\n\/\/ const book: Product = {\n\/\/     id: \"BK202\",\n\/\/     name: \"The Great Novel\",\n\/\/     category: \"literature\", \/\/ Hata: 'literature' tipi 'books' | 'clothing' | 'electronics' | 'home' tipine atanamaz.\n\/\/     availability: \"available\" \/\/ Hata: 'available' tipi 'inStock' | 'outOfStock' | 'comingSoon' tipine atanamaz.\n\/\/ };<\/code><\/pre>\n<h4>3. Olay Dinleyicileri ve Yay\u0131c\u0131lar\u0131 (Event Listeners\/Emitters)<\/h4>\n<p>\u00d6zellikle UI bile\u015fenlerinde veya durum y\u00f6netimi sistemlerinde olay isimlerini standartla\u015ft\u0131rmak i\u00e7in kullan\u0131labilir.<\/p>\n<pre><code class=\"language-typescript\">type UIEvents = \"click\" | \"hover\" | \"focus\" | \"blur\";\n\nfunction addUIEventListener(element: HTMLElement, eventType: UIEvents, handler: Function) {\n    element.addEventListener(eventType, (e) => handler(e));\n}\n\nconst myButton = document.getElementById(\"myButton\")!;\naddUIEventListener(myButton, \"click\", () => console.log(\"Butona t\u0131kland\u0131!\"));\n\/\/ addUIEventListener(myButton, \"mousedown\", () => console.log(\"Mouse down!\")); \/\/ Hata<\/code><\/pre>\n<h4>4. Durum Y\u00f6netimi (State Management)<\/h4>\n<p>Redux gibi durum y\u00f6netimi k\u00fct\u00fcphanelerinde action tiplerini tan\u0131mlamak i\u00e7in \u00e7ok yayg\u0131n kullan\u0131l\u0131r. Bu, reducer&#8217;lar\u0131n do\u011fru action&#8217;lar\u0131 i\u015flemesini garanti eder.<\/p>\n<pre><code class=\"language-typescript\">type ActionType = \"ADD_TODO\" | \"TOGGLE_TODO\" | \"SET_FILTER\";\n\ninterface AddTodoAction {\n    type: \"ADD_TODO\";\n    payload: { id: number; text: string };\n}\n\ninterface ToggleTodoAction {\n    type: \"TOGGLE_TODO\";\n    payload: { id: number };\n}\n\ninterface SetFilterAction {\n    type: \"SET_FILTER\";\n    payload: { filter: \"all\" | \"active\" | \"completed\" };\n}\n\ntype AppAction = AddTodoAction | ToggleTodoAction | SetFilterAction;\n\nfunction appReducer(state: any, action: AppAction) {\n    switch (action.type) {\n        case \"ADD_TODO\":\n            \/\/ action.payload.id ve action.payload.text'e g\u00fcvenle eri\u015filebilir.\n            return { ...state, todos: [...state.todos, action.payload] };\n        case \"TOGGLE_TODO\":\n            \/\/ action.payload.id'ye g\u00fcvenle eri\u015filebilir.\n            return {\n                ...state,\n                todos: state.todos.map((todo: any) =>\n                    todo.id === action.payload.id ? { ...todo, completed: !todo.completed } : todo\n                )\n            };\n        case \"SET_FILTER\":\n            \/\/ action.payload.filter'a g\u00fcvenle eri\u015filebilir.\n            return { ...state, filter: action.payload.filter };\n        default:\n            return state;\n    }\n}<\/code><\/pre>\n<h4>5. Ay\u0131rt Edici Birle\u015fimler (Discriminated Unions)<\/h4>\n<p>Bu, string literal tiplerinin en g\u00fc\u00e7l\u00fc kullan\u0131m alanlar\u0131ndan biridir. Birle\u015fim tiplerindeki (union types) nesneleri, ortak bir literal \u00f6zelli\u011fine (discriminant) g\u00f6re ay\u0131rt etmemizi sa\u011flar. Bu sayede TypeScript, kodunuzdaki ko\u015fullu dallanmalarda (if\/else, switch) nesnenin tam tipini daraltabilir (type narrowing).<\/p>\n<pre><code class=\"language-typescript\">interface SuccessResponse {\n    status: \"success\";\n    data: any;\n}\n\ninterface ErrorResponse {\n    status: \"error\";\n    message: string;\n    code: number;\n}\n\ninterface LoadingResponse {\n    status: \"loading\";\n}\n\ntype APIResponse = SuccessResponse | ErrorResponse | LoadingResponse;\n\nfunction handleResponse(response: APIResponse) {\n    switch (response.status) {\n        case \"success\":\n            console.log(\"Veri ba\u015far\u0131yla al\u0131nd\u0131:\", response.data); \/\/ 'response' burada 'SuccessResponse' tipindedir.\n            break;\n        case \"error\":\n            console.error(\"Hata olu\u015ftu:\", response.message, \"Kod:\", response.code); \/\/ 'response' burada 'ErrorResponse' tipindedir.\n            break;\n        case \"loading\":\n            console.log(\"Veriler y\u00fckleniyor...\"); \/\/ 'response' burada 'LoadingResponse' tipindedir.\n            break;\n        default:\n            \/\/ Bu k\u0131sma asla ula\u015f\u0131lamaz, \u00e7\u00fcnk\u00fc t\u00fcm olas\u0131 'status' de\u011ferleri ele al\u0131nd\u0131.\n            \/\/ TypeScript burada bir hata vermez.\n            break;\n    }\n}\n\nconst success: APIResponse = { status: \"success\", data: { user: \"Alice\" } };\nconst error: APIResponse = { status: \"error\", message: \"Network error\", code: 500 };\nconst loading: APIResponse = { status: \"loading\" };\n\nhandleResponse(success);\nhandleResponse(error);\nhandleResponse(loading);<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>status<\/code> \u00f6zelli\u011fi bir string literal tipi olarak tan\u0131mlanm\u0131\u015ft\u0131r. <code>switch<\/code> ifadesinde <code>response.status<\/code> de\u011ferine g\u00f6re TypeScript, <code>response<\/code> nesnesinin tam tipini do\u011fru bir \u015fekilde belirler. Bu, <code>response.data<\/code> veya <code>response.message<\/code> gibi \u00f6zelliklere g\u00fcvenli bir \u015fekilde eri\u015fmemizi sa\u011flar.<\/p>\n<h3>Geli\u015fmi\u015f Kullan\u0131m Teknikleri<\/h3>\n<p>String literal tipleri, TypeScript&#8217;in di\u011fer geli\u015fmi\u015f tip sistem \u00f6zellikleriyle birle\u015fti\u011finde daha da g\u00fc\u00e7l\u00fc hale gelir.<\/p>\n<h4>1. Template Literal Tipleri<\/h4>\n<p>TypeScript 4.1 ile tan\u0131t\u0131lan Template Literal Tipleri, string literal tiplerini dinamik olarak olu\u015fturman\u0131za olanak tan\u0131r. JavaScript&#8217;teki template string&#8217;lere benzer bir s\u00f6zdizimi kullan\u0131r ve var olan string literal tiplerini birle\u015ftirerek yeni string literal tipleri t\u00fcretebilir.<\/p>\n<pre><code class=\"language-typescript\">type Direction = \"top\" | \"bottom\" | \"left\" | \"right\";\ntype CSSProperty = \"margin\" | \"padding\";\n\n\/\/ <code>margin-top<\/code>, <code>margin-bottom<\/code>, <code>padding-left<\/code> gibi tipler olu\u015fturur.\ntype SpacingProperty = <code>${CSSProperty}-${Direction}<\/code>;\n\nlet myMargin: SpacingProperty = \"margin-top\"; \/\/ Ge\u00e7erli\nlet myPadding: SpacingProperty = \"padding-right\"; \/\/ Ge\u00e7erli\n\/\/ let invalidProp: SpacingProperty = \"color-red\"; \/\/ Hata\n\ntype Greeting<T extends string> = <code>Hello, ${T}!<\/code>;\nlet greetingToUser: Greeting<\"Alice\"> = \"Hello, Alice!\"; \/\/ Ge\u00e7erli\n\/\/ let greetingToOther: Greeting<\"Bob\"> = \"Hello, Carol!\"; \/\/ Hata<\/code><\/pre>\n<p>Template literal tipleri, \u00f6zellikle CSS \u00f6zelliklerini, API u\u00e7 noktalar\u0131n\u0131 veya g\u00fcnl\u00fck mesajlar\u0131n\u0131 tan\u0131mlarken son derece kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h4>2. <code>as const<\/code> Assertions<\/h4>\n<p><code>as const<\/code> bildirimi, bir de\u011fi\u015fkenin veya dizinin i\u00e7eri\u011finin m\u00fcmk\u00fcn olan en dar tipte (genellikle literal tipler) yorumlanmas\u0131n\u0131 sa\u011flar. Bu, bir <code>string<\/code> dizisini bir string literal birle\u015fim tipine d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-typescript\">const AVAILABLE_COLORS = [\"red\", \"green\", \"blue\"] as const;\n\n\/\/ typeof AVAILABLE_COLORS: readonly [\"red\", \"green\", \"blue\"]\n\/\/ typeof AVAILABLE_COLORS[number]: \"red\" | \"green\" | \"blue\"\n\ntype Color = typeof AVAILABLE_COLORS[number]; \/\/ Color art\u0131k \"red\" | \"green\" | \"blue\" tipindedir.\n\nfunction applyColor(element: HTMLElement, color: Color) {\n    element.style.color = color;\n}\n\nconst myDiv = document.createElement(\"div\");\napplyColor(myDiv, \"red\");   \/\/ Ge\u00e7erli\n\/\/ applyColor(myDiv, \"purple\"); \/\/ Hata<\/code><\/pre>\n<p>Bu y\u00f6ntem, \u00f6zellikle bir dizi sabit de\u011feri y\u00f6netirken ve bunlar\u0131 bir tip olarak kullanmak istedi\u011finizde, manuel olarak bir <code>type<\/code> birle\u015fimi yazmaktan daha pratiktir.<\/p>\n<h4>3. <code>keyof<\/code> Operat\u00f6r\u00fc ile Birlikte Kullan\u0131m<\/h4>\n<p><code>keyof<\/code> operat\u00f6r\u00fc, bir nesne tipinin t\u00fcm anahtarlar\u0131n\u0131n string literal birle\u015fimini d\u00f6nd\u00fcr\u00fcr. Bu, dinamik anahtar eri\u015fimi i\u00e7in string literal tipleriyle birle\u015ftirilebilir.<\/p>\n<pre><code class=\"language-typescript\">interface UserProfile {\n    name: string;\n    email: string;\n    age: number;\n}\n\ntype UserProfileKeys = keyof UserProfile; \/\/ \"name\" | \"email\" | \"age\"\n\nfunction getPropertyValue<T, K extends keyof T>(obj: T, key: K): T[K] {\n    return obj[key];\n}\n\nconst user: UserProfile = { name: \"John Doe\", email: \"john@example.com\", age: 30 };\n\nlet userName = getPropertyValue(user, \"name\");  \/\/ userName tipi: string\nlet userAge = getPropertyValue(user, \"age\");    \/\/ userAge tipi: number\n\/\/ let invalidKey = getPropertyValue(user, \"address\"); \/\/ Hata: 'address' tipi 'UserProfileKeys' tipine atanamaz.<\/code><\/pre>\n<h4>4. Mapped Tipler ve String Literal Tipler<\/h4>\n<p>Mapped tipler, bir dizi anahtar \u00fczerinde d\u00f6nerek yeni tipler olu\u015fturman\u0131za olanak tan\u0131r. Template literal tipleriyle birle\u015fti\u011finde, dinamik olarak yeni \u00f6zellik adlar\u0131 i\u00e7eren tipler olu\u015fturabilirsiniz.<\/p>\n<pre><code class=\"language-typescript\">type Feature = \"darkMode\" | \"notifications\" | \"analytics\";\n\n\/\/ Her \u00f6zellik i\u00e7in bir 'enable' ve 'disable' anahtar\u0131 olu\u015fturan bir tip\ntype FeatureToggles = {\n    [K in Feature as <code>enable${Capitalize<K>}<\/code>]: boolean;\n} & {\n    [K in Feature as <code>disable${Capitalize<K>}<\/code>]: boolean;\n};\n\n\/\/ Bu tip a\u015fa\u011f\u0131daki gibi geni\u015fleyecektir:\n\/\/ {\n\/\/     enableDarkMode: boolean;\n\/\/     disableDarkMode: boolean;\n\/\/     enableNotifications: boolean;\n\/\/     disableNotifications: boolean;\n\/\/     enableAnalytics: boolean;\n\/\/     disableAnalytics: boolean;\n\/\/ }\n\nconst userToggles: FeatureToggles = {\n    enableDarkMode: true,\n    disableDarkMode: false,\n    enableNotifications: true,\n    disableNotifications: false,\n    enableAnalytics: false,\n    disableAnalytics: true,\n};<\/code><\/pre>\n<p>Bu \u00f6rnek, <code>Capitalize<\/code> yard\u0131mc\u0131 tipini kullanarak <code>darkMode<\/code> gibi bir string&#8217;i <code>DarkMode<\/code>&#8216;a d\u00f6n\u00fc\u015ft\u00fcr\u00fcr ve ard\u0131ndan <code>enableDarkMode<\/code> gibi yeni \u00f6zellik adlar\u0131 olu\u015fturur.<\/p>\n<h3>String Literal Tipleri vs. Enums<\/h3>\n<p>TypeScript&#8217;te, sabit de\u011fer k\u00fcmelerini tan\u0131mlaman\u0131n bir di\u011fer yolu da <code>enum<\/code> kullanmakt\u0131r. String literal tipleri ve <code>enum<\/code>&#8216;lar benzer ama\u00e7lara hizmet etse de, \u00f6nemli farkl\u0131l\u0131klar\u0131 vard\u0131r ve belirli senaryolarda biri di\u011ferine tercih edilebilir.<\/p>\n<p>| \u00d6zellik           | String Literal Tipleri                                  | Enums (String Enums)                                    |<br \/>\n| :&#8212;&#8212;&#8212;&#8212;&#8212;- | :&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; | :&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; |<br \/>\n| <strong>Derleme Zaman\u0131<\/strong> | Yaln\u0131zca derleme zaman\u0131nda var olur.                    | Hem derleme zaman\u0131nda hem de \u00e7al\u0131\u015fma zaman\u0131nda var olur. |<br \/>\n| <strong>\u00c7al\u0131\u015fma Zaman\u0131<\/strong> | JavaScript \u00e7\u0131kt\u0131s\u0131nda iz b\u0131rakmaz (tree-shaking dostu). | \u00c7al\u0131\u015fma zaman\u0131nda bir nesne olarak var olur.           |<br \/>\n| <strong>Tip G\u00fcvenli\u011fi<\/strong>  | Y\u00fcksek tip g\u00fcvenli\u011fi sa\u011flar.                            | Y\u00fcksek tip g\u00fcvenli\u011fi sa\u011flar.                            |<br \/>\n| <strong>Kullan\u0131m<\/strong>      | Fonksiyon parametreleri, nesne \u00f6zellikleri, ay\u0131rt edici birle\u015fimler. | Sabit de\u011fer listeleri, bayraklar.                      |<br \/>\n| <strong>Boyut<\/strong>         | Kod boyutuna etki etmez.                                | \u00c7al\u0131\u015fma zaman\u0131 nesnesi nedeniyle k\u00fc\u00e7\u00fck bir kod boyutu ekler. |<br \/>\n| <strong>Reverse Mapping<\/strong> | Yok.                                                    | Say\u0131sal enum&#8217;larda var (string enum&#8217;larda yok).         |<br \/>\n| <strong>Esneklik<\/strong>      | <code>Template Literal Tipleri<\/code> ile daha esnek.              | Daha az esnek, de\u011ferler sabittir.                       |<\/p>\n<p><strong>Ne Zaman String Literal Tiplerini Kullanmal\u0131?<\/strong><\/p>\n<p>*   <strong>Sadece tip g\u00fcvenli\u011fi ar\u0131yorsan\u0131z:<\/strong> De\u011ferlerin \u00e7al\u0131\u015fma zaman\u0131nda bir nesne olarak mevcut olmas\u0131na gerek yoksa.<br \/>\n*   <strong>Tree-shaking (a\u011fa\u00e7 sallama) \u00f6nemliyse:<\/strong> \u00dcretim paket boyutunu minimumda tutmak istiyorsan\u0131z.<br \/>\n*   <strong>Daha dinamik tip olu\u015fturma ihtiyac\u0131n\u0131z varsa:<\/strong> Template literal tipleri gibi \u00f6zelliklerle yeni string literal tipleri t\u00fcretmek istiyorsan\u0131z.<br \/>\n*   <strong>Ay\u0131rt Edici Birle\u015fimler kullan\u0131yorsan\u0131z:<\/strong> <code>status: \"success\" | \"error\"<\/code> gibi senaryolarda do\u011fal olarak entegre olurlar.<\/p>\n<p><strong>Ne Zaman Enum Kullanmal\u0131?<\/strong><\/p>\n<p>*   <strong>\u00c7al\u0131\u015fma zaman\u0131nda bir nesneye ihtiyac\u0131n\u0131z varsa:<\/strong> \u00d6rne\u011fin, <code>Enum.Key<\/code> veya <code>Enum[\"Key\"]<\/code> gibi de\u011ferlere \u00e7al\u0131\u015fma zaman\u0131nda eri\u015fmeniz gerekiyorsa.<br \/>\n*   <strong>De\u011ferlerin birbiriyle ili\u015fkili oldu\u011fu ve bir grup olu\u015fturdu\u011fu a\u00e7\u0131k\u00e7a belirtilmek isteniyorsa:<\/strong> <code>enum Direction { Up, Down, Left, Right }<\/code> gibi.<br \/>\n*   <strong>JavaScript&#8217;ten TypeScript&#8217;e ge\u00e7i\u015f yaparken tan\u0131d\u0131k bir yap\u0131 ar\u0131yorsan\u0131z:<\/strong> Di\u011fer dillerdeki enum&#8217;lara a\u015fina olan geli\u015ftiriciler i\u00e7in daha tan\u0131d\u0131k olabilir.<\/p>\n<p>Genel olarak, modern TypeScript geli\u015ftirme pratiklerinde, e\u011fer \u00e7al\u0131\u015fma zaman\u0131 nesnesine kesinlikle ihtiyac\u0131n\u0131z yoksa, string literal tipleri \u00e7o\u011fu durumda daha hafif ve esnek bir alternatif olarak tercih edilir.<\/p>\n<h3>S\u0131n\u0131rlamalar ve Dikkat Edilmesi Gerekenler<\/h3>\n<p>String literal tipleri g\u00fc\u00e7l\u00fc olsa da, baz\u0131 s\u0131n\u0131rlamalar\u0131 ve dikkat edilmesi gereken noktalar\u0131 vard\u0131r:<\/p>\n<p>1.  <strong>Harici Giri\u015f Do\u011frulamas\u0131:<\/strong> String literal tipleri yaln\u0131zca derleme zaman\u0131 g\u00fcvenli\u011fi sa\u011flar. Bir d\u0131\u015f kaynaktan (API yan\u0131t\u0131, kullan\u0131c\u0131 giri\u015fi, dosya okuma) gelen veriler hala \u00e7al\u0131\u015fma zaman\u0131 do\u011frulamas\u0131na ihtiya\u00e7 duyar. TypeScript, bu verilerin beklenen literal tiplere uydu\u011funu garanti edemez.<\/p>\n<pre><code class=\"language-typescript\">\/\/ D\u0131\u015far\u0131dan gelen veri, tip olarak 'string' olacakt\u0131r.\n    const apiResponseStatus: string = getStatusFromAPI();\n\n    \/\/ TypeScript, apiResponseStatus'\u0131n \"success\" | \"error\" oldu\u011fundan emin olamaz.\n    \/\/ Bu y\u00fczden \u00e7al\u0131\u015fma zaman\u0131 do\u011frulamas\u0131 gereklidir.\n    if (apiResponseStatus === \"success\" || apiResponseStatus === \"error\") {\n        \/\/ Art\u0131k TypeScript bu dalda apiResponseStatus'\u0131 \"success\" | \"error\" olarak daralt\u0131r.\n        handleResponse({ status: apiResponseStatus });\n    } else {\n        console.error(\"Bilinmeyen API durumu:\", apiResponseStatus);\n    }<\/code><\/pre>\n<p>2.  <strong>\u00c7ok Say\u0131da Se\u00e7enek \u0130\u00e7in Uzunluk:<\/strong> E\u011fer bir string literal tipi \u00e7ok say\u0131da olas\u0131 de\u011feri i\u00e7eriyorsa, tan\u0131m \u00e7ok uzun ve okunmas\u0131 zor hale gelebilir. Bu durumda, alternatif yakla\u015f\u0131mlar (\u00f6rne\u011fin, bir dizi <code>as const<\/code> ile tan\u0131mlay\u0131p <code>typeof Array[number]<\/code> kullanmak) veya daha genel bir <code>string<\/code> tipi kullanmay\u0131 d\u00fc\u015f\u00fcnebilirsiniz.<\/p>\n<p>3.  <strong>A\u015f\u0131r\u0131 M\u00fchendislik (Over-engineering):<\/strong> Her <code>string<\/code> de\u011feri i\u00e7in bir literal tip tan\u0131mlamak gereksiz olabilir. Yaln\u0131zca belirli, k\u0131s\u0131tl\u0131 bir de\u011fer k\u00fcmesi beklenen durumlarda kullan\u0131n.<\/p>\n<h3>En \u0130yi Uygulamalar<\/h3>\n<p>String literal tiplerini etkili bir \u015fekilde kullanmak i\u00e7in baz\u0131 en iyi uygulamalar \u015funlard\u0131r:<\/p>\n<p>*   <strong>A\u00e7\u0131klay\u0131c\u0131 \u0130simler Kullan\u0131n:<\/strong> Tip alias&#8217;lar\u0131n\u0131z i\u00e7in anlaml\u0131 ve a\u00e7\u0131klay\u0131c\u0131 isimler se\u00e7in (\u00f6rne\u011fin, <code>OrderStatus<\/code> yerine <code>string<\/code> de\u011fil).<br \/>\n*   <strong>\u0130lgili Literalleri Gruplay\u0131n:<\/strong> Mant\u0131ksal olarak birbiriyle ili\u015fkili string literallerini tek bir tip alias&#8217;\u0131 alt\u0131nda toplay\u0131n.<br \/>\n*   <strong>Ay\u0131rt Edici Birle\u015fimlerle Kombine Edin:<\/strong> Karma\u015f\u0131k veri yap\u0131lar\u0131n\u0131 daha g\u00fcvenli ve y\u00f6netilebilir hale getirmek i\u00e7in ay\u0131rt edici birle\u015fimlerin g\u00fcc\u00fcnden yararlan\u0131n.<br \/>\n*   <strong>Mod\u00fcler Olun:<\/strong> String literal tiplerinizi ve ilgili tipleri ayr\u0131 dosyalarda veya mod\u00fcllerde tan\u0131mlayarak kod taban\u0131n\u0131z\u0131 d\u00fczenli tutun.<br \/>\n*   <strong>Dok\u00fcmantasyon:<\/strong> \u00d6zellikle daha karma\u015f\u0131k template literal tipleri veya mapped tipler kullan\u0131yorsan\u0131z, kod yorumlar\u0131 veya JSDoc ile tiplerinizi belgeleyin.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>TypeScript&#8217;teki string literal tipleri, basit ama son derece g\u00fc\u00e7l\u00fc bir \u00f6zelliktir. <code>string<\/code> tipinin esnekli\u011fini korurken, belirli senaryolarda tip g\u00fcvenli\u011fini, kod okunabilirli\u011fini ve geli\u015ftirici deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. Fonksiyon parametrelerini k\u0131s\u0131tlamaktan, karma\u015f\u0131k durum y\u00f6netimi sistemlerini g\u00fcvenli hale getirmeye ve hatta dinamik olarak yeni tipler olu\u015fturmaya kadar geni\u015f bir kullan\u0131m yelpazesi sunarlar.<\/p>\n<p>Ay\u0131rt edici birle\u015fimler ve template literal tipleri gibi di\u011fer TypeScript \u00f6zellikleriyle birle\u015fti\u011finde, string literal tipleri, daha sa\u011flam, bak\u0131m\u0131 kolay ve hatas\u0131z uygulamalar geli\u015ftirmenize yard\u0131mc\u0131 olan vazge\u00e7ilmez bir ara\u00e7 haline gelir. Enums ile kar\u015f\u0131la\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda, genellikle daha hafif ve tree-shaking dostu bir alternatif sunarak modern web geli\u015ftirme ihtiya\u00e7lar\u0131na daha iyi yan\u0131t verirler.<\/p>\n<p>TypeScript projelerinizde string literal tiplerini bilin\u00e7li ve stratejik bir \u015fekilde kullanarak, derleme zaman\u0131nda daha fazla hatay\u0131 yakalayabilir, kodunuzun niyetini daha net ifade edebilir ve nihayetinde daha g\u00fcvenilir yaz\u0131l\u0131mlar olu\u015fturabilirsiniz. Bu makaledeki bilgiler ve \u00f6rnekler, bu g\u00fc\u00e7l\u00fc \u00f6zelli\u011fi kendi projelerinizde tam potansiyeliyle kullanman\u0131z i\u00e7in size bir ba\u015flang\u0131\u00e7 noktas\u0131 sunmay\u0131 ama\u00e7lamaktad\u0131r.<br \/>\n<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"TypeScript&#8217;te String Literal Tipleri: Detayl\u0131 Bir \u0130nceleme\nGiri\u015f: TypeScript ve Geli\u015fmi\u015f Tip G\u00fcvenli\u011fi\nModern web geli\u015ftirme d\u00fcnyas\u0131nda,","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-34450","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 String Literal Tipleri: Detayl\u0131 Bir \u0130nceleme - 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-string-literal-tipleri-detayli-bir-inceleme\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"TypeScript&#039;te String Literal Tipleri: Detayl\u0131 Bir \u0130nceleme\" \/>\n<meta property=\"og:description\" content=\"TypeScript&#039;te String Literal Tipleri: Detayl\u0131 Bir \u0130nceleme Giri\u015f: TypeScript ve Geli\u015fmi\u015f Tip G\u00fcvenli\u011fi Modern web geli\u015ftirme d\u00fcnyas\u0131nda,\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-16T18:40:48+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=\"14 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"TypeScript&#8217;te String Literal Tipleri: Detayl\u0131 Bir \u0130nceleme\",\"datePublished\":\"2025-11-16T18:40:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/\"},\"wordCount\":2002,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/\",\"name\":\"TypeScript'te String Literal Tipleri: Detayl\u0131 Bir \u0130nceleme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-16T18:40:48+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"TypeScript&#8217;te String Literal Tipleri: Detayl\u0131 Bir \u0130nceleme\"}]},{\"@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 String Literal Tipleri: Detayl\u0131 Bir \u0130nceleme - 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-string-literal-tipleri-detayli-bir-inceleme\/","og_locale":"tr_TR","og_type":"article","og_title":"TypeScript'te String Literal Tipleri: Detayl\u0131 Bir \u0130nceleme","og_description":"TypeScript'te String Literal Tipleri: Detayl\u0131 Bir \u0130nceleme Giri\u015f: TypeScript ve Geli\u015fmi\u015f Tip G\u00fcvenli\u011fi Modern web geli\u015ftirme d\u00fcnyas\u0131nda,","og_url":"https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-16T18:40:48+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"14 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"TypeScript&#8217;te String Literal Tipleri: Detayl\u0131 Bir \u0130nceleme","datePublished":"2025-11-16T18:40:48+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/"},"wordCount":2002,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/","url":"https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/","name":"TypeScript'te String Literal Tipleri: Detayl\u0131 Bir \u0130nceleme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-16T18:40:48+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/typescriptte-string-literal-tipleri-detayli-bir-inceleme\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"TypeScript&#8217;te String Literal Tipleri: Detayl\u0131 Bir \u0130nceleme"}]},{"@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\/34450","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=34450"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34450\/revisions"}],"predecessor-version":[{"id":34451,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34450\/revisions\/34451"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34450"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34450"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}