TypeScript tipleri, bir değişkenin ne tür bir değer tutabileceğini tanımlar. Tipi iki nokta üst üsteden sonra yazarsınız, let name: string, ve derleyici oraya yanlış türde bir değer koyan her kodu reddeder. Temel tipler, yedi JavaScript primitive'i ile diziler ve nesneler için nesne tipleridir.
Notasyonlar derleme zamanında kontrol edilir ve sonra silinir. Çalışan program düz JavaScript'tir.
Primitive Tipler
| Tip | Örnek değerler | Notlar |
|---|---|---|
string | "hi", 'hi', `hi ${name}` | Metin. Üç tırnak stilinin tipi de aynıdır. |
number | 42, 3.14, -0.5, NaN, Infinity | Tam olsun olmasın her sayı. int veya float yoktur. |
boolean | true, false | Yalnızca bu iki değer. |
bigint | 10n, BigInt(10) | Her boyutta tam sayı. ES2020 veya sonrası target gerekir. |
symbol | Symbol("id") | Benzersiz bir değer, çoğunlukla nesne anahtarı olarak kullanılır. |
null | null | "Bilerek boş". |
undefined | undefined | "Ayarlanmamış". Olmayan bir özellik okunduğunda da bu gelir. |
Tip adları küçük harflidir. Çalışma zamanında typeof çoğu için aynı kelimeleri döndürür; yani program çalışırken bir değerin primitive tipini typeof x === "number" ile kontrol edersiniz.
Tip Notasyonları
Notasyon, bir değişkenden, bir parametreden ya da bir fonksiyonun parametre listesinden sonra gelen : Type ifadesidir. Notasyonların en çok önem taşıdığı yer parametrelerdir, çünkü TypeScript çağıranın ne göndereceğini tahmin edemez.
Bir değişkene aynı satırda başlangıç değeri verildiğinde notasyon genellikle gereksizdir: let count = 10 zaten number tipindedir. Tipleri yazmamanın kuralları tip çıkarımı sayfasında.
Yanlış Tip Bir Derleme Hatasıdır
Yanlış tipte bir değer atayın, derleyici hiçbir şey çalışmadan durur:
Derleyici şunu yazdırır:
index.ts(3,1): error TS2322: Type 'string' is not assignable to type 'number'.
Çözüm değeri dönüştürmektir, port = Number("3000"); ya da değişken gerçekten metin tutmalıysa notasyonu değiştirmektir.
number: Tam Sayı Tipi Yok
JavaScript her sayıyı 64 bitlik bir kayan nokta değeri olarak saklar, bu yüzden TypeScript'te tek bir number tipi vardır. Tam sayılar Number.MAX_SAFE_INTEGER (2 ** 53 - 1) değerine kadar kesindir. Bunun ötesinde bigint kullanın.
bigint ve number karışmaz: exact + 1 bir derleme hatasıdır (TS2365: Operator '+' cannot be applied to types 'bigint' and '1'.; burada '1', 1 değerinin literal tipidir) ve bir şekilde çalışsaydı çalışma zamanında da bir TypeError olurdu. Bir tarafı BigInt(1) veya Number(exact) ile açıkça dönüştürün; Number fonksiyonunun güvenli aralığın ötesindeki değerleri yuvarladığını unutmayın.
Yalnızca tam sayıları kabul eden bir tip istiyorsanız, TypeScript bunu keyfi değerler için ifade edemez. Değerin programınıza girdiği yerde Number.isInteger ile doğrulayın.
boolean
boolean tipinin tam olarak iki değeri vardır: true ve false. Yalnızca truthy olan değerler (1, "yes") boolean değildir; onları Boolean(x) veya x !== 0 ile boolean'a çevirin.
null ve undefined
strict açıkken (TypeScript 6.0'dan beri varsayılan) null ve undefined ayrı tiplerdir ve string, number ya da başka bir tipin parçası değildir. Boş olabilecek bir değişken bunu bir union ile belirtir:
undefined olabilecek bir değerin özelliğini okumak, siz onu kontrol edene kadar bir derleme hatasıdır. Kontrolleri, ?. ve ?? operatörlerini null ve undefined sayfası anlatıyor.
Kısaca Diziler ve Nesneler
Primitive olmayan her şey bir nesne tipidir. İlk karşılaşacağınız üç biçim:
let tags: string[] = ["ts", "js"]; // array of strings
let point: { x: number; y: number } = { x: 1, y: 2 }; // object with two number properties
let greet: (name: string) => string = (n) => `hi ${n}`; // function type
Her birinin kendi sayfası var: diziler, tuple'lar (sabit uzunluklu diziler), nesne tipleri ve fonksiyon tipleri.
string, number, boolean ile String, Number, Boolean
Büyük harfle başlayan adlar sıradan değerlerin değil, JavaScript'in sarmalayıcı nesnelerinin (new String("x")) tipleridir. Notasyonlarda küçük harfli adları kullanın.
index.ts(3,7): error TS2322: Type 'String' is not assignable to type 'string'.
'string' is a primitive, but 'String' is a wrapper object. Prefer using 'string' when possible.
İlk satırdaki String kelimesini string yapın, blok çalışır. Aynısı Number, Boolean, Symbol ve BigInt için de geçerlidir. (Object farklı bir durumdur: primitive'ler dahil neredeyse her değeri kabul eder; nesne tiplerine bakın.)
Diğer Yerleşik Tipler
Birkaç tip daha erken karşınıza çıkar. Her birinin kendi sayfası var.
| Tip | Anlamı |
|---|---|
any | O değer için kontrolü kapatır. Kaçının. |
unknown | Herhangi bir değer, ama kullanmadan önce kontrol etmeniz gerekir. |
void | Bir fonksiyon işe yarar bir şey döndürmez. |
never | Hiç değer yok: her zaman hata fırlatan bir fonksiyon ya da imkansız bir durum. |
object | Primitive olmayan herhangi bir değer. |
"red" | "green" | Bir literal tip: yalnızca bu tam değerler. |
Sıkça Sorulan Sorular
TypeScript'te bir tam sayı tipi var mı?
Hayır. number hem tam sayıları hem ondalıklı sayıları kapsar, çünkü JavaScript her sayıyı 64 bitlik bir float olarak saklar. Bir değerin tam sayı olup olmadığını çalışma zamanında Number.isInteger(n) ile kontrol edin; Number.MAX_SAFE_INTEGER (2 ** 53 - 1) değerinden büyük tam sayılara hassasiyet kaybı olmadan ihtiyacınız varsa bigint (10n) kullanın.
TypeScript'te string ile String arasındaki fark nedir?
string, string literal'lerinin ve template string'lerin sahip olduğu primitive tiptir. String ise new String("x") ile oluşturulan sarmalayıcı (wrapper) nesnenin tipidir. Notasyonlarda her zaman küçük harfli string, number ve boolean kullanın; bir String değerini bir string değişkenine atamak derleme hatasıdır (TS2322).
TypeScript'teki primitive tipler nelerdir?
JavaScript'tekiyle aynı yedi tip: string, number, boolean, bigint, symbol, null ve undefined. Geri kalan her şey (diziler, nesneler, fonksiyonlar, sınıf örnekleri) bir nesne tipidir.
TypeScript'te tipli bir değişken nasıl tanımlanır?
Addan sonra iki nokta üst üste ve tipi yazın: let count: number = 0;. Bir fonksiyonda her parametreye ve isteğe bağlı olarak dönüş tipine notasyon ekleyin: function add(a: number, b: number): number. Bir değişkene başlangıç değeri verildiğinde notasyonu genellikle yazmayıp TypeScript'in çıkarmasına bırakabilirsiniz.
TypeScript tipleri çalışma zamanında var mıdır?
Hayır. Derleyici tipleri kontrol eder ve sonra siler; yani çalışan JavaScript'te notasyon yoktur. Çalışma zamanında değerleri typeof, Array.isArray ve instanceof gibi JavaScript operatörleriyle kontrol edersiniz.