TypeScript'i Kullanmak
TypeScript, JavaScript kod tabanlarına tip tanımları eklemenin popüler bir yoludur. TypeScript,kullanıma hazır olarak JSX’i destekler ve projenize @types/react ve @types/react-dom ekleyerek tam React Web desteği alabilirsiniz.
Bunları öğreneceksiniz
Kurulum
Tüm production-grade React framework’leri, TypeScript kullanımını destekler. Kurulum için framework’e özel guide’ı takip edin:
Mevcut Bir React Projesine TypeScript Ekleme
React’in tip tanımlamalarının en son sürümünü yüklemek için:
npm install --save-dev @types/react @types/react-domtsconfig.json dosyanızda aşağıdaki derleyici seçeneklerinin ayarlanması gerekir::
libiçindedombulunmalıdır (Not: Eğerlibseçeneği belirtilmezse,domvarsayılan olarak dahildir).jsx, geçerli seçeneklerden birine ayarlanmalıdır. Çoğu uygulama içinpreserveyeterli olacaktır. Eğer bir kütüphane yayımlıyorsanız, hangi değeri seçeceğinizi öğrenmek içinjsxdokümantasyonuna bakın.
React Bileşenleri ile TypeScript
React ile TypeScript yazmak, React ile JavaScript yazmaya çok benzer. Bir bileşenle çalışırken ana fark, bileşenin props’ları için tipler sağlayabilmenizdir. Bu tipler, doğruluk kontrolü yapmak ve editörlerde satır içi dokümantasyon sağlamak için kullanılabilir
Hızlı Başlangıç kılavuzundan MyButton bileşenini alarak, butonun title’ını tanımlayan bir tip ekleyebiliriz:
function MyButton({ title }: { title: string }) { return ( <button>{title}</button> ); } export default function MyApp() { return ( <div> <h1>Uygulamama hoş geldiniz</h1> <MyButton title="Ben bir butonum" /> </div> ); }
Bu yerinde sözdizimi, bir bileşen için tipler sağlamanın en basit yoludur; ancak birkaç alan tanımlamaya başladığınızda karmaşık hale gelebilir. Bunun yerine, bileşenin prop’larını tanımlamak için bir interface veya type kullanabilirsiniz:
interface MyButtonProps { /** Butonun içinde görüntülenecek metin */ title: string; /** Butonun etkileşime girilip girilemeyeceği */ disabled: boolean; } function MyButton({ title, disabled }: MyButtonProps) { return ( <button disabled={disabled}>{title}</button> ); } export default function MyApp() { return ( <div> <h1>Uygulamama hoş geldiniz</h1> <MyButton title="Ben devre dışı bırakılmış bir butonum" disabled={true}/> </div> ); }
Bileşeninizin props’larını tanımlayan tip, ihtiyaç duyduğunuz kadar basit veya karmaşık olabilir; ancak bunlar ya type ya da interface ile tanımlanmış bir nesne tipi olmalıdır. TypeScript’in nesneleri nasıl tanımladığını Nesne Tipleri bölümünde öğrenebilirsiniz, ayrıca birkaç farklı tipten birini alabilen bir prop tanımlamak için Birleşim Tipleri kullanmayı ve daha karmaşık kullanım senaryoları için Tiplerden tip Oluşturma kılavuzunu incelemeyi de düşünebilirsiniz.
Örnek Hooklar
@types/react’den gelen tip tanımlamaları, yerleşik Hooks için tipleri içerir, böylece bileşenlerinizde ek bir ayar yapmadan kullanabilirsiniz. Bu tipler, bileşeninizde yazdığınız kodu dikkate alacak şekilde tasarlanmıştır, bu nedenle çoğu zaman çıkarılan tipleralırsınız ve ideal olarak tipleri sağlama detaylarıyla ilgilenmeniz gerekmez.
@types/react paketindeki tip tanımlamaları, yerleşik Hook’lar için tipleri içerir; bu nedenle, bileşenlerinizde ek bir kurulum yapmadan bunları kullanabilirsiniz. Bu tipler, bileşeninizde yazdığınız kodu dikkate alacak şekilde tasarlanmıştır; bu sayede çoğu zaman çıkarımsal tipler elde edersiniz ve ideal olarak tipleri manuel olarak belirtmenize gerek kalmaz.
Yine de, Hook’lar için tip sağlamaya dair birkaç örneğe bakabiliriz.
useState
useState Hook’udeğerinin tipini belirlemek için başlangıç durumu olarak geçirilen değeri yeniden kullanacaktır. Örneğin:
// Infer the type as "boolean"
const [enabled, setEnabled] = useState(false);Bu, enabled değişkenine boolean tipini atayacak ve setEnabled fonksiyonu ya bir boolean argümanı ya da bir boolean döndüren bir fonksiyon alacaktır. Eğer duruma açıkça bir tip sağlamak istiyorsanız, bunu useState çağrısına bir tip argümanı vererek yapabilirsiniz:
// Türü açıkça “boolean” olarak ayarlayın
const [enabled, setEnabled] = useState<boolean>(false);Bu durumda çok faydalı değil, ancak bir tip sağlamanız gereken yaygın bir durum, bir birleşim tipiyle karşılaştığınızda ortaya çıkar. Örneğin, burada status birkaç farklı string değerinden biri olabilir
type Status = "idle" | "loading" | "success" | "error";
const [status, setStatus] = useState<Status>("idle");Ya da, Durum yapılandırma ilkeleri bölümünde önerildiği gibi, ilgili durumu bir nesne olarak gruplandırabilir ve farklı olasılıkları nesne tipleri aracılığıyla tanımlayabilirsiniz:
type RequestState =
| { status: 'idle' }
| { status: 'loading' }
| { status: 'success', data: any }
| { status: 'error', error: Error };
const [requestState, setRequestState] = useState<RequestState>({ status: 'idle' });useReducer
useReducer Hook’u, bir azaltıcı fonksiyon ve bir başlangıç durumu alan daha karmaşık bir Hook’tur. Azaltıcı fonksiyonun tipleri, başlangıç durumundan çıkarılır. useReducer çağrısına bir tip argümanı sağlayarak duruma bir tip verebilirsiniz, ancak genellikle tipi başlangıç durumuna ayarlamak daha iyidir:
import {useReducer} from 'react'; interface State { count: number }