Arayüzler ve Nesne Türleri
interface ve type ile nesne yapılarını tanımlayın, arayüzleri genişletin, ? ile isteğe bağlı özellikleri ve değişmezlik için readonly kullanın.
Arayüzler ve Nesne Türleri, CoddyKit'te ücretsiz bir Frontend Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Frontend Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Frontend Academy kursu toplamda 4 dersten oluşur.
Arayüz ve Tür Karşılaştırması
Hem interface hem de type, nesne yapılarını açıklar. Temel fark şudur: arayüzler birleştirilebilir (bildirim birleştirme) ve genellikle herkese açık API yapılarını tanımlamak için tercih edilir. Tür takma adları karmaşık türler için daha esnektir.
// interface:
interface User {
id: number;
name: string;
}
// type alias (equivalent for objects):
type User = {
id: number;
name: string;
};Arayüz Tanımlama
Bir nesnenin yapısını tanımlamak için interface kullanın. Tüm özellikler varsayılan olarak zorunludur. Özellikleri noktalı virgüllerle ayırın.
interface Product {
id: number;
name: string;
price: number;
description: string;
inStock: boolean;
category: string;
}İsteğe Bağlı ve Salt Okunur Özellikler
Özellikleri ? ile isteğe bağlı olarak işaretleyin. Değiştirmeyi önlemek için readonly kullanın. Salt okunur özelliği, derleme zamanında değişmezliği zorunlu kılar.
interface Config {
host: string;
port?: number; // optional: number | undefined
readonly apiKey: string; // can't change after assignment
}
const config: Config = { host: 'localhost', apiKey: 'abc' };
config.port = 8080; // OK
config.apiKey = 'new'; // Error: readonlyArayüzleri Genişletme
Başka bir arayüzün tüm özelliklerini içeren yeni bir arayüz oluşturmak için extends kullanın. Çoklu kalıtım desteklenir.
interface Animal {
name: string;
sound(): string;
}
interface Dog extends Animal {
breed: string;
fetch(): void;
}
interface ServiceDog extends Dog {
task: string;
}Dizin İmzaları — Dinamik Anahtarlar
Özellik adlarını önceden bilmiyor, ancak değer türlerini biliyorsanız dizin imzası kullanın.
interface StringMap {
[key: string]: string;
}
const headers: StringMap = {
'Content-Type': 'application/json',
'Authorization': 'Bearer token123'
};
// Also for translating:
interface Translations {
[locale: string]: { [key: string]: string };
}Arayüzlerde İşlev Türleri
Bir arayüzün içinde işlev imzaları tanımlayın — hem kısa biçim hem de tam özellik söz dizimi kullanılabilir.
interface Logger {
log(message: string): void;
warn(message: string): void;
error(message: string, err?: Error): void;
}
// Also valid:
interface Logger2 {
log: (message: string) => void;
}Sınıflarda Arayüzleri Uygulama
Bir sınıf, bir veya daha fazla arayüzü implement edebilir. TypeScript, sınıfın gerekli tüm üyeleri sağladığını doğrular.
interface Serialisable {
serialise(): string;
deserialise(data: string): this;
}
class User implements Serialisable {
constructor(public name: string) {}
serialise() { return JSON.stringify({ name: this.name }); }
deserialise(data: string) {
const obj = JSON.parse(data);
return new User(obj.name) as this;
}
}Bildirim Birleştirme
Aynı ada sahip birden çok interface bildirimi tek bir bildirimde birleştirilir. Üçüncü taraf türlerini genişletmek için kullanışlıdır. Tür takma adları bunu desteklemez.
interface Window {
myPlugin: { version: string };
}
// Now window.myPlugin is typed everywhereİç İçe Nesne Türleri
Arayüz özelliklerinin kendileri de nesne türlerine sahip olabilir — bu türler doğrudan yazılabilir veya başka bir arayüze başvurabilir.
interface Order {
id: string;
customer: {
name: string;
email: string;
};
items: Array<{
productId: string;
quantity: number;
price: number;
}>;
total: number;
}Yapısal Türleme — Ördek Türleme
TypeScript yapısal türleme kullanır: bir değer, en azından gerekli özelliklere sahipse bir türü karşılar. Açık bir uygulama bildirimi gerekmez. Doğru yapıya sahip herhangi bir nesne uyumludur.
interface Named {
name: string;
}
function greet(obj: Named) {
console.log(`Hello, ${obj.name}!`);
}
// No 'implements Named' needed:
greet({ name: 'Alice', age: 30 }); // OK — has the name propertyArayüzlerle Ayırt Edilmiş Birleşimler
Bir birleşimdeki çeşitleri ayırt etmek için değişmez değer türünde bir ayırt edici özellik ekleyin. TypeScript, ayırt edici özelliğe göre switch/if içinde türü daraltır.
interface Circle { kind: 'circle'; radius: number; }
interface Square { kind: 'square'; side: number; }
type Shape = Circle | Square;
function area(shape: Shape): number {
switch (shape.kind) {
case 'circle': return Math.PI * shape.radius ** 2;
case 'square': return shape.side ** 2;
}
}Kısa Kontrol
TypeScript'te interface ile type arasındaki temel fark nedir?
Özet: Arayüzler
Arayüzler, zorunlu, isteğe bağlı ve salt okunur özelliklere sahip nesne yapılarını açıklar. Arayüzleri genişletin. Dinamik anahtarlar için dizin imzalarını kullanın. Sınıflar arayüzleri uygular. Bildirim birleştirme yalnızca arayüzlere özgüdür. TypeScript yapısal türleme kullanır — önemli olan açık bildirim değil, yapıdır.
Sıkça Sorulan Sorular
“Arayüzler ve Nesne Türleri” dersi ücretsiz mi?
Evet — “Arayüzler ve Nesne Türleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Frontend Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Frontend Academy kursu toplamda 4 dersten oluşur.
“Arayüzler ve Nesne Türleri” dersinde ne öğreneceğim?
interface ve type ile nesne yapılarını tanımlayın, arayüzleri genişletin, ? ile isteğe bağlı özellikleri ve değişmezlik için readonly kullanın. Frontend Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Frontend Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Frontend Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Arayüzler ve Nesne Türleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Frontend Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Frontend Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- TypeScript Neden Kullanılır: Türler Derleme Zamanında Hataları Yakalar
- İlkel Türler, Birleşimler ve Tür Takma Adları
- Arayüzler ve Nesne Türleri
- TS Derleme ve tsconfig.json