JSON'dan TypeScript'e

Ücretsiz çevrimiçi JSON'dan TypeScript'e aracı. JSON verilerini standart TS interface tür tanımlarına otomatik çıkarır. İç içe alt arayüzler, dizi birleşim türleri, isteğe bağlı ve readonly alanlar, 2/4 boşluk girintisi seçimi desteği, yalnızca tarayıcıda yerel işlem, yükleme yok.

İlgili Öneriler

JSON'dan TypeScript'e Hakkında: JSON Verilerini Otomatik TS Türlerine Dönüştürme

JSON'dan TypeScript'e, JSON biçimindeki verileri (JSON nesneleri veya JSON dizileri) TypeScript interface tür bildirimlerine dönüştürme işlemidir. JSON (JavaScript Object Notation), REST API'leri, yapılandırma dosyaları, loglar için standart veri formatı olarak ön uç ve arka uç geliştirmede her yerde bulunur, TypeScript ise JavaScript'in bir üst kümesi olup koda statik tür denetimi ekler. Geliştirmede genellikle API'nin döndüğü JSON'a karşılık gelen bir TS interface yazmak gerekir, manuel yazmak hata yapmaya açıktır ve zaman alır — bu araç bu süreci otomatikleştirmek içindir.

Aracın çekirdeği, JSON nesnesinin yapısını otomatik olarak TypeScript interface'e çıkarmaktır. Her JSON nesnesinin key'i interface'in özellik adı olur, her value'nun değişmez türü karşılık gelen TS türüne eşlenir: dize `string`'e, sayı `number`'a, boolean `boolean`'a, null `null`'a, dizi `T[]`'ye, iç içe nesne bağımsız bir alt arayüze eşlenir. Tüm süreç tarayıcıda yerel olarak tamamlanır, arka uç hizmeti gerekmez, birkaç saniyede tam ve kullanılabilir tür tanımı üretilir.

Tür çıkarımı, JSON'dan TypeScript'e dönüşümünün çekirdeğidir. JSON'ın kendisinin yalnızca 6 temel türü vardır (null, boolean, number, string, array, object), oysa TypeScript'in temel tür sistemi string, number, boolean, null, undefined, any, unknown, void, never, object, Array, T[], birleşim türleri (A | B) vb. içerir. Aracımızın getTsType fonksiyonu value'nun typeof ve somut biçimine göre eşleme yapar: typeof null `null` ile eşlenir; typeof undefined `undefined` ile eşlenir; typeof boolean `boolean` ile eşlenir; typeof number `number` ile eşlenir; typeof string `string` ile eşlenir; Array.isArray() doğru döndüğünde dizi olarak işlenir.

İç içe nesne işleme, aracın önemli bir yeteneğidir. JSON iç içe nesneler içerdiğinde, araç tür tekrarını önlemek için özyinelemeli olarak bağımsız alt arayüzler üretir. Örneğin `address: { street, city }`, `RootAddress` alt arayüzünü üretecek ve ana interface `address: RootAddress` aracılığıyla ona başvuracaktır. Alt arayüz adlandırma kuralı: "üst interface adı + alan adının ilk harfi büyük", anlamsal netliği korur. processedTypes Set'i tekilleştirme için kullanılır, aynı yapıdaki iç içe nesneler yalnızca bir kez interface üretir.

Dizi türü çıkarımının üç işleme modu vardır. Birincisi, dizi boş olduğunda, `any[]` yedek olarak üretilir (öğe türü çıkarılamadığı için). İkincisi, tüm öğeler aynı türde olduğunda, `T[]` biçimi (ör. `string[]`, `User[]`) üretilir. Üçüncüsü, öğe türleri farklı olduğunda, birleşim dizisi `(A | B)[]` (ör. `(string | number)[]`) üretilir. Bu ayrım, üretilen türleri hem doğru hem de okunabilir kılar, gereksiz `any[]` aşırı kullanımını önler.

İsteğe bağlı alanlar (?), TypeScript strict modunun önemli bir özelliğidir. Etkinleştirildiğinde, araç her alanın değerini tarar ve null veya undefined ise interface'e `?` değiştiricisi ekler: `name?: string` o alanın atlanabilir olduğunu belirtir. Bu, arka uç API'sinin döndürdüğü isteğe bağlı alanlar için çok kullanışlıdır, undefined alanlara erişirken çalışma zamanı hatalarını önler. readonly alanlar değişmezliği vurgular, üretilen kod `readonly id: number` biçimindedir, yapılandırma, durum anlık görüntüleri, DTO gibi senaryoları tanımlamak için uygundur.

interface vs type alias, TypeScript kullanıcılarının sık karşılaştığı bir seçimdir. Bu araç interface'i tutarlı bir şekilde üretmeyi seçti, çünkü interface TypeScript'te nesne türlerini tanımlamanın standart yoludur, bildirim birleştirme (declaration merging), implements anahtar kelimesi, extends kalıtımını destekler ve React, Vue, Angular gibi ana ön uç projelerinin kodlama standartlarına daha uygundur. type alias, birleşim türlerini, kesişim türlerini, fonksiyon türlerini tanımlamada daha güçlüdür, ancak nesne türleri için interface tercih edilir.

Gerçek zamanlı dönüşüm, aracın pratik bir özelliğidir. Kullanıcı JSON'ı girdikten sonra 400ms debounce ile dönüşüm otomatik olarak tetiklenir, manuel olarak düğmeye tıklamak gerekmez. CodeMirror'ın TypeScript sözdizimi vurgulaması (@codemirror/lang-javascript içinde typescript: true seçeneği aracılığıyla) ile birleştiğinde, kullanıcı üretilen interface'i anında görebilir, girdiyi değiştirerek çıktı değişikliklerini gözlemleyebilir. Bu gerçek zamanlı geri bildirim, tür tasarımı verimliliğini önemli ölçüde artırır, özellikle hızlı deneme yanılma sırasında.

JSON hatası otomatik düzeltme, aracın sağlamlığını artırır. Gerçekte, kullanıcıların girdiği JSON'da sıklıkla sondaki virgül, tek tırnak, eksik tırnak, yorum gibi küçük sorunlar bulunur. Yerleşik tryFixJSON fonksiyonu, JSON.parse başarısız olduğunda yaygın hataları otomatik olarak düzeltmeyi dener, başarılı olursa kullanıcıyı bilgilendirir; hâlâ ayrıştırılamıyorsa sağ tarafta belirli hata konumu ve nedeni görüntülenir, kullanıcıyı düzeltmeye yönlendirir. Bu tasarım, aracın pratikliğini bir üst seviyeye taşır, küçük hatalar nedeniyle tekrarlanan manuel ayarlamalardan kurtarır.

Tamamen ön uç işleme, bu aracın temel mimarisidir. Tüm JSON ayrıştırma, tür çıkarımı, interface üretimi tarayıcı JavaScript'inde yürütülür, herhangi bir sunucuya veri gönderilmez. Bu tasarımın iki temel faydası vardır: birincisi, JSON içeriği kullanıcının hassas bilgilerini (API anahtarı, token, kullanıcı verileri) içerebilir, yerel işleme sızıntı riskini tamamen ortadan kaldırır; ikincisi, dönüşüm hızı yalnızca cihazın CPU'suyla sınırlıdır, 1MB altındaki JSON neredeyse anında dönüştürülür, ağ gidiş-dönüşünü beklemek gerekmez. Bu, kayıt ve giriş gerektiren bazı çevrimiçi hizmetlere kıyasla daha iyi gizlilik koruması ve performans sağlar.

Kullanım senaryoları

  • Ön uç geliştirmede REST API veya GraphQL'den dönen JSON yanıtlarını hızla TS interface'e dönüştürerek manuel tür tanımı yazmaktan kaçının.
  • React/Vue/Angular projelerinde Props, State, bileşen parametreleri için tür bildirimleri gerektiğinde, örnek JSON'dan birkaç saniyede üretin.
  • Tam yığın TypeScript projelerinde, ön uç ve arka uç tür tanımlarını paylaştığında, arka ucun mock JSON'u ön ucun tür kaynağı olarak kullanılabilir.
  • Üçüncü taraf API'lerle (kargo, hava durumu, ödeme vb.) entegrasyonda, karşılık gelen TypeScript arayüzlerini hızla üreterek belgeleri inceleme zahmetinden kurtulun.
  • Mock verilerden, test fikstürlerinden, JSON yapılandırma dosyalarından tür tanımlarını geri çıkararak tür güvenliğini ve IDE ipuçlarını güçlendirin.
  • Veritabanı ORM'sinin dışa aktardığı JSON Schema'yı TypeScript interface'e dönüştürerek Node.js arka uç DTO tanımlarına entegre edin.
  • TypeScript öğrenirken mevcut JSON'u interface örneğine dönüştürerek iç içe türler, birleşim türleri, isteğe bağlı alanların sözdizimini anlayın.
  • Kod yeniden düzenlemesinde dağınık JS nesne literallerini resmi interface'lere dönüştürerek kod okunabilirliğini ve tür güvenliğini artırın.

Nasıl Kullanılır

  1. Sol giriş kutusuna JSON içeriğini yapıştırın veya "Yükle" düğmesine tıklayarak .json/.txt dosyası seçin veya "Örnek"e tıklayarak yerleşik örneği yükleyin.
  2. Araç çubuğunun sağındaki interface adı düğmesine (veya dişli simgesine) tıklayarak kök interface adını özelleştirin (varsayılan Root), isteğe bağlı/readonly alanları etkinleştirin.
  3. Araç otomatik olarak dönüştürür (girişten 400ms debounce); sağ tarafta üretilen TypeScript interface kodunu inceleyin, CodeMirror vurgulaması okumayı kolaylaştırır.
  4. Girinti stilini (2 veya 4 boşluk) seçin, optimum görüntüleme için araç çubuğunun sol/sağ panel genişliğini ayarlayın.
  5. "Kopyala"ya tıklayarak TS kodunu panoya kopyalayın veya "İndir"e tıklayarak `${interfaceName}.ts` dosyası (ör. User.ts) olarak kaydedin.
  6. Kodu projenizin `types/` dizinine veya `src/types/` dizinine yapıştırın, gerektiğinde import ederek kullanın.

Özellikler

  • Akıllı tür çıkarımı: null, boolean, number, string, array, object gibi TypeScript türlerini otomatik tanır ve yerel TS sözdizimine eşler.
  • İç içe nesneleri otomatik genişletme: iç içe nesneler için bağımsız alt arayüzler (ör. RootAddress) otomatik oluşturur, tür hiyerarşisini net tutar ve fazlalığı önler.
  • Dizi türü akıllı işleme: öğe türleri aynıysa `T[]`, karışık türlerde birleşim dizisi `(A | B)[]`, boş dizilerde `any[]` yedek olarak üretilir.
  • İsteğe bağlı alan işaretleme: etkinleştirildiğinde null/undefined alanları otomatik algılar, `?` değiştiricisi ekler, TypeScript strict moduna uygun kod üretir.
  • readonly alan desteği: etkinleştirildiğinde tüm alanlara `readonly` değiştiricisi ekler, değişmez durum, yapılandırma, DTO gibi senaryolara uygundur.
  • Interface adı özelleştirme: kök interface adı yapılandırılabilir (varsayılan Root), indirilen dosya adı da bu adı kullanır (ör. User.ts).
  • 2/4 boşluk girintisi seçilebilir: araç çubuğunda tek tıkla 2 boşluk (ESLint varsayılanı) ve 4 boşluk girinti stili arasında geçiş.
  • Gerçek zamanlı otomatik dönüşüm: JSON girişinden 400ms sonra debounce ile otomatik dönüşüm, düğmeye tıklama gerekmez; yapıştırma, dosya yükleme, örnek olmak üzere üç giriş yöntemi desteklenir.
  • JSON hatası otomatik düzeltme: yerleşik tryFixJSON düzeltme fonksiyonu, sondaki virgül, tek tırnak, eksik tırnak gibi yaygın sözdizimi hatalarını otomatik işler.
  • TypeScript kodu vurgulama: sağ çıktı CodeMirror + JavaScript (TypeScript) vurgulaması kullanır, okunabilirliği yüksektir.
  • Kopyalama ve indirme: tek tıkla panoya kopyalama veya standart .ts dosyası olarak indirme, ön uç projede doğrudan kullanılabilir.
  • Tamamen tarayıcıda yerel işlem: tüm JSON ayrıştırma, tür çıkarımı, interface üretimi tarayıcı JavaScript'inde yapılır, orijinal veri yüklenmez.

Sık Sorulan Sorular

JSON TypeScript interface'e nasıl dönüştürülür?

JSON içeriğini sol giriş kutusuna yapıştırın, araç her alanın türünü (string, number, boolean, array, object vb.) otomatik çıkarır ve standart TypeScript interface tanımı üretir. İç içe nesneler otomatik olarak alt arayüzler oluşturarak tür hiyerarşisini net tutar. Girişten 400ms sonra otomatik dönüşüm gerçekleşir, düğmeye tıklamak gerekmez.

type alias mı yoksa interface mi üretiliyor?

Bu araç yalnızca TypeScript interface bildirimleri üretir (type alias desteklenmez). interface, TypeScript'te nesne türlerini tanımlamanın standart yoludur, bildirim birleştirme (declaration merging) ve implements anahtar kelimesini destekler, React, Vue, Angular gibi ön uç projeler için tercih edilir.

İsteğe bağlı alanlar nasıl işaretlenir?

Ayarlarda "İsteğe bağlı alanlar (?)" etkinleştirildiğinde, araç değeri null veya undefined olan alanları otomatik algılar ve interface'e `?` değiştiricisi ekler. Örneğin `name?: string` o alanın atlanabilir olduğunu belirtir. Üretilen kod TypeScript strict katı mod spesifikasyonuna uygundur.

readonly alanlar nasıl üretilir?

Ayarlarda "readonly alanlar" etkinleştirildiğinde, tüm alanlara otomatik olarak `readonly` değiştiricisi eklenir, örneğin `readonly id: number`. Üretilen interface değişmezliği vurgular, yapılandırma, durum anlık görüntüleri veya DTO tanımlamak için uygundur.

Dizi türleri nasıl işlenir?

Araç dizi öğelerinin türlerini analiz eder. Tüm öğeler aynı türdeyse `T[]` biçimi (ör. `string[]`); türler farklıysa birleşim dizisi `(A | B)[]` biçimi (ör. `(string | number)[]`); dizi boşsa `any[]` yedek olarak üretilir.

İç içe nesneler birden fazla interface üretir mi?

Evet. Her iç içe nesne bağımsız bir alt arayüz üretir, adlandırma kuralı: "üst interface adı + alan adının ilk harfi büyük". Örneğin Root, address nesnesi içeriyorsa hem Root hem de RootAddress arayüzleri üretilir. Alt arayüzler otomatik olarak birbirine başvurur, tür tanımlarının tekrarlanmasını önler.

Interface adı özelleştirilebilir mi?

Evet. Araç çubuğunun sağındaki interface adı düğmesine tıklayarak (veya ayarlardan) kök interface adını özelleştirebilirsiniz (varsayılan Root). İndirilen .ts dosyası da bu adla adlandırılır (ör. `User.ts`). Alt arayüzlerin adları kök ada göre otomatik üretilir.

İndirilen .ts dosyası doğrudan projede kullanılabilir mi?

Evet. Üretilen kod TypeScript kodlama standartlarına uygundur, tam tür tanımları, iç içe arayüzler, birleşim türü çıkarımı vb. içerir ve doğrudan React, Vue, Angular veya Node.js projelerine kopyalanıp kullanılabilir. İndirilen dosya adı `${interfaceName}.ts`'dir, örneğin User.ts.

JSON ayrıştırma başarısız olursa ne yapmalıyım?

JSON'da sondaki virgül, eksik tırnak, tek tırnak yerine çift tırnak gibi yaygın hatalar varsa, araç otomatik olarak tryFixJSON'ı çağırarak düzeltmeyi dener. Düzeltme başarılı olursa kullanıcıya bildirilir; düzeltilemezse sağ tarafta belirli hata konumu ve nedeni görüntülenir. 2/4 boşluk girintisi ile yeniden biçimlendirip tekrar deneyebilirsiniz.

Hangi JSON veri yapıları destekleniyor?

Tüm geçerli JSON veri yapıları desteklenir: temel türler (null, boolean, number, string), diziler (tek veya çok boyutlu), iç içe nesneler (herhangi bir derinlik), karışık türde diziler (birleşim türü üretir). Desteklenmeyen girişler: JSON'da fonksiyon, Symbol, undefined gibi JavaScript özel değerlerinin bulunması (bunlar geçerli JSON değildir).

Girinti boşluk sayısı seçilebilir mi?

Evet. Araç çubuğunun sağ tarafında girinti ayarı açılır menüsü bulunur, 2 ve 4 boşluk olmak üzere iki stili destekler. 2 boşluk ESLint/Prettier varsayılan stilidir, 4 boşluk daha gevşek girinti gerektiren projeler için uygundur. Üretilen kod tutarlı bir girinti koruyarak okunabilirliği ve bakımı kolaylaştırır.

JSON Schema, Zod ve diğer tür kütüphanelerinden farkı nedir?

JSON Schema çalışma zamanı veri doğrulaması (API sınırları, kullanıcı girişi doğrulaması) için uygundur; Zod/yup TypeScript dostu çalışma zamanı doğrulama kütüphaneleridir ve şemadan TS türleri üretebilir; aracımız hafif bir saf tür tanımı üreticisidir, çalışma zamanı doğrulaması yapmaz, ön uç statik tür tanımı senaryolarına odaklanır, daha hızlıdır ve sıfır bağımlılığı vardır.

Sorun Giderme

Üretilen interface yanlışsa ne yapmalıyım?

Yaygın nedenler: JSON ayrıştırma başarısız, iç içe nesne tanıma hatası, dizi türü çıkarım hatası. Çözümler: 1) JSON'ın geçerli olup olmadığını kontrol edin (JSON biçimlendirme aracı kullanın); 2) İç içe nesneler için, alt arayüz başvuru ilişkilerini doğrulayın; 3) Diziler için, öğe türlerinin eşleşip eşleşmediğini kontrol edin; 4) Yeniden üretin veya üretilen kodu manuel olarak ince ayar yapın. Üretilen interface bir taslaktır, projenizin gerçek API'sine göre ayrıntıların ayarlanması gerekir.

İndirilen .ts dosyası projede derleme hatası veriyor?

Olası nedenler: 1) tsconfig.json'da strict modu etkin değil ama readonly alanlar üretildi; 2) Arayüz adı projedeki diğer türlerle çakışıyor; 3) Alan adı TypeScript anahtar kelimesi (ör. `class`, `type`). Çözümler: tsconfig'in strict ayarını ayarlayın, arayüz adını değiştirin, çakışan alanlara tırnak kaçışı ekleyin (ör. `"class": string`).

JSON iç içe diziler içeriyor, tür çıkarımı yanlış mı?

Bu araç çok boyutlu dizileri (ör. `[[1, 2], [3, 4]]`) özyinelemeli olarak işler ve sonunda `number[][]` üretir. İç içe dizi öğelerinin türleri farklıysa, araç `((A | B)[])[]` biçimi üretir. Boş diziler her zaman `any[]` üretir, çünkü öğe türü çıkarılamaz.

null değeri isteğe bağlı alan yerine `null` türüne mi eşleniyor?

Varsayılan olarak, araç JSON'daki null değerini TS'nin `null` türüyle eşler (ör. `middleName: null`). İsteğe bağlı alan (`middleName?: string`) üretmek istiyorsanız: 1) "İsteğe bağlı alanlar" seçeneğini etkinleştirin (önerilen); 2) veya JSON'daki null değerini alan eksikliğiyle değiştirin; 3) veya üretimden sonra manuel olarak `null`'ı `string | null` veya `?` olarak değiştirin.

Interface adı ve indirilen dosya adı eşleşmiyor?

Araçta ikisi de aynı değerdir, "interface adı" ayarıyla kontrol edilir (varsayılan Root). İndirilen dosya adı `${interfaceName}.ts`'dir. Eşleşmiyor gibi görünüyorsa, ayarların eşitlenmemesine neden olabilecek birden fazla sekmenin açık olup olmadığını kontrol edin. Ayar değişikliklerinden sonra yeniden üretmeniz önerilir.

Üretilen kodda çok fazla `any` türü mü var?

Olası nedenler: 1) JSON tanınmayan türler içeriyor (gerçekte nesne ama ayrıştırma hatası); 2) Dizi boş olduğu için any[] yedek; 3) Alan değeri null ve isteğe bağlı alan etkin değil. Çözümler: JSON verilerinin bütünlüğünü kontrol edin, aracın çıkarımını iyileştirmek için örnek veri ekleyin, her zaman boş olan diziler için türü manuel olarak belirtin (ör. `User[]`).

Üretilen interface'i mevcut türlerle birleştirmek istiyorum?

TypeScript interface bildirim birleştirmeyi (declaration merging) destekler, aynı adlı interface'ler özelliklerini otomatik olarak birleştirir. Projede aynı adlı bir interface oluşturup export etmeniz yeterlidir, sonra birleşir: örneğin araç `export interface User { id: number }` üretti, siz projede `export interface User { name: string }` yazarsanız, ikisi otomatik olarak `{ id: number; name: string }` olarak birleşir.

Sözlük

JSON (JavaScript Object Notation)
JavaScript nesne sözdizimine dayanan ancak programlama dilinden bağımsız hafif bir veri değişim formatı. Nesne ({}), dizi ([]), dize, sayı, boolean, null olmak üzere 6 temel türü destekler. REST API'lerinde, ön uç-arka uç veri iletiminde, yapılandırma dosyalarında, loglarda yaygın olarak kullanılır.
TypeScript
Microsoft tarafından geliştirilen JavaScript'in bir üst kümesi, JavaScript'e statik tür tanımları, arayüzler, jenerikler gibi özellikler ekler. TypeScript kodu, tarayıcıda veya Node.js'de çalıştırılmak üzere saf JavaScript'e derlenir. React, Vue, Angular gibi modern ön uç projeler için tercih edilen dildir.
interface (arayüz)
TypeScript'te nesne türlerini tanımlayan anahtar kelime, sözdizimi: `interface Name { prop: type; }`. Bildirim birleştirmeyi (aynı adlı interface'ler otomatik birleşir), implements'ı (sınıf arayüzü uygular), extends'i (arayüz kalıtımı) destekler. TypeScript'te nesne şeklini tanımlamanın ana yoludur.
type alias
TypeScript'te türlere takma ad veren anahtar kelime, sözdizimi: `type Name = ...`. Birleşim türleri (`A | B`), kesişim türleri (`A & B`), fonksiyon türleri tanımlamak için kullanılabilir. interface'ten daha esnektir ancak bildirim birleştirmeyi desteklemez. Bu araç type yerine interface kullanır.
Tür Çıkarımı (Type Inference)
Bu aracın JSON value'sunun typeof ve somut biçimine göre karşılık gelen TS türünü otomatik olarak belirlediği süreç. Örneğin typeof string string ile eşlenir, Array.isArray() doğru döndüğünde dizi olarak işlenir, typeof object doğru döndüğünde bağımsız bir alt arayüz üretilir.
İsteğe bağlı alan (?)
TypeScript'te bir alanın atlanabilir olduğunu belirten değiştirici. `name?: string`, name alanının var olmayabileceğini belirtir (değer undefined). Aracın "İsteğe bağlı alanlar" seçeneği etkinleştirildiğinde, değeri null veya undefined olan alanlara otomatik olarak `?` eklenir.
readonly alan (readonly)
TypeScript'te bir alanın değişmez olduğunu belirten değiştirici. `readonly id: number`, id alanının nesne oluşturulduktan sonra yeniden atanamayacağını belirtir. Aracın "readonly alanlar" seçeneği etkinleştirildiğinde, tüm alanlara otomatik olarak `readonly` eklenir.
Birleşim Türü (Union Type)
TypeScript'te bir değerin birkaç türden biri olabileceğini belirten sözdizimi, `A | B` olarak yazılır. Araç, dizi öğesi türleri farklı olduğunda kullanır, örneğin `(string | number)[]` dizi öğelerinin string veya number olabileceğini belirtir.
Dizi Türü (Array Type)
TypeScript'te dizileri belirten sözdizimi, iki biçimi vardır: jenerik biçim `Array<T>` ve kısaltma biçimi `T[]`. Araç tutarlı bir şekilde kısaltma biçimini kullanır. Aracın üç dizi türü üretim modu vardır: tek tür `T[]`, karışık tür `(A | B)[]`, boş dizi `any[]`.
İç içe Arayüz (Nested Interface)
Bir interface içinde diğer interface'lere başvurarak tür hiyerarşisi oluşturma. Araç her iç içe nesne için bağımsız bir alt arayüz üretir, ana arayüz özellik adıyla başvurur. Örneğin Root, RootAddress'e başvurur, RootAddress diğer türler tarafından bağımsız olarak başvurulabilir.
TypeScript strict modu
TypeScript derleyicisinin katı modu, noImplicitAny, strictNullChecks, strictFunctionTypes gibi birkaç alt seçenek içerir. strictNullChecks etkinleştirildiğinde, null ve undefined bağımsız türlerdir ve diğer tür değişkenlerine atanamaz. Aracın ürettiği isteğe bağlı alanlar strict moduyla tamamen uyumludur.
DTO (Data Transfer Object)
Farklı katmanlar (ör. API ve Service katmanı) arasında veri aktarmak için kullanılan veri aktarım nesnesi. TypeScript projelerinde genellikle interface ile tanımlanır, readonly ile birleştiğinde değişmezliği vurgular. Bu araç, DTO tür tanımları üretmek için yaygın bir araçtır.
Bildirim Birleştirme (Declaration Merging)
TypeScript interface'in özelliği: aynı adlı interface'ler özelliklerini otomatik olarak birleştirir. Üçüncü taraf kütüphanelerin tür tanımlarını genişletmek için sıklıkla kullanılır. Aracın ürettiği interface'ler projedeki diğer aynı adlı interface'lerle birleştirilebilir, aşamalı tür genişletmesini kolaylaştırır.
tsconfig.json
TypeScript projesinin yapılandırma dosyası, proje kök dizininde bulunur. compilerOptions (target, module, strict vb.), include, exclude gibi ayarları içerir. Aracın ürettiği .ts dosyaları herhangi bir standart tsconfig projesinde kullanılabilir.
tryFixJSON
Bu aracın yerleşik JSON düzeltme fonksiyonu, sondaki virgül, çift tırnakların tek tırnaklarla değiştirilmesi, key'lerdeki eksik tırnaklar, yorumlar gibi yaygın JSON sözdizimi hatalarını otomatik olarak işler. JSON.parse başarısız olduğunda otomatik olarak çağrılır, başarılı düzeltme sonrasında kullanıcıyı bilgilendirir ve dönüşüme devam eder.

JSON Türünden TypeScript Türüne Eşleme Kuralları

Aracımızın getTsType fonksiyonunun JSON value biçimine göre TypeScript türünü çıkardığı tam kurallar:

JSON değeriÖrnekTypeScript türüBelirleme kuralı
nullnullnullJSON null doğrudan TS null türüne eşlenir
undefinedundefinedundefinedundefined değeri TS undefined'a eşlenir (yalnızca çalışma zamanında var)
booleantrue / falsebooleantypeof boolean TS boolean'a eşlenir
integer1, 100, -9999numberTamsayı ve kayan noktalı sayılar TS number'a eşlenir
float3.14, -0.5, 1e10numberTüm sayısal değişmezler number'a eşlenir (TS tamsayı ve kayan noktayı ayırt etmez)
string"Alice", "İstanbul"stringtypeof string TS string'e eşlenir
empty array[]any[]Boş dizi öğe türü çıkarılamaz, any[] yedek
homogeneous array[1, 2, 3]T[] (ör. number[])Öğe türleri aynı olduğunda tek dizi türü üretilir
mixed array[1, "a"](A | B)[] (ör. (number | string)[])Öğe türleri farklı olduğunda birleşim dizi türü üretilir
object{a: 1, b: "x"}SubInterface (ör. Root)İç içe nesne bağımsız alt arayüz üretir ve başvurur

interface vs type alias karşılaştırması

Bu aracın type alias yerine interface üretmesinin nedenleri ve TypeScript projelerinde ikisi arasındaki farklar:

Yetenek boyutuinterfacetype aliasAçıklama
Nesne türü tanımı✓ (tercih edilen)✓ (de desteklenir)İkisi de desteklenir, araç interface üretir
Bildirim birleştirme✓ (aynı adlı otomatik birleşir)✗ (tekrar bildirim hata verir)interface aşamalı genişletmeyi destekler, type desteklemez
implements/extends✓ (sınıf implements yapabilir)△ (yalnızca nesne type implements yapılabilir)interface OOP senaryolarında daha doğal
Birleşim türü (A | B)type birleşim türlerini tanımlamada daha özlü
Kesişim türü (A & B)type kesişim türlerini tanımlamada daha özlü
Fonksiyon türü△ (call signature gerekir)✓ (doğrudan tanımlanır)type fonksiyon türlerini tanımlamada daha sezgisel
Performans (çok sayıda tür)Biraz daha hızlıBiraz daha yavaşinterface derleme sırasında artımlı birleştirmede daha hızlı
Aracın seçimi✓ Tutarlı kullanımAraç nesne türlerine odaklanır, interface en iyi seçim

İsteğe bağlı alanlar ve readonly alanlar üretim kuralları

Bu aracın iki anahtar seçeneğinin üretilen koda etkisi ve en iyi kullanım senaryoları:

SeçenekTetikleme koşuluÜretilen sözdizimiEn iyi kullanım senaryosu
İsteğe bağlı alan (?): kapalı(varsayılan)name: stringTüm alanlar zorunlu, türler katı
İsteğe bağlı alan (?): açıkvalue === null || value === undefinedname?: stringİsteğe bağlı alanlar, atlanabilir veriler
readonly alan (readonly): kapalı(varsayılan)name: stringGenel türler, alanlar yazılabilir
readonly alan (readonly): açıkTüm alanlar tutarlı işlenirreadonly name: stringDeğişmez durum, yapılandırma, DTO, API yanıtı
İkisi de açıkİkisi de karşılanırreadonly name?: stringAPI yanıt anlık görüntüleri, isteğe bağlı yapılandırma

Privacy & Security

Bu JSON'dan TypeScript'e aracının tüm işlemleri tamamen tarayıcınızda yerel olarak gerçekleştirilir: JSON ayrıştırma, tür çıkarımı, interface üretimi tarayıcı JavaScript'i tarafından istemci tarafında yürütülür, ağ üzerinden hiçbir sunucuya JSON içeriği, yüklenen dosyalar veya üretilen kod gönderilmez. Dosya yükleme, ara bir hizmet olmadan doğrudan belleğe okumak için tarayıcının yerel FileReader API'sini kullanır. Çerez izleme kullanılmaz, kullanıcı girdisi veya kullanım verisi toplanmaz. Sayfa kapatıldıktan veya yenilendikten sonra tüm girdi ve çıktı içerikleri bellekten otomatik olarak temizlenir. API anahtarı, token, hassas iş verileri içeren JSON'ları işlemek için uygundur.

Authoritative References