TypeScript ve Modern JavaScript ile Güvenli Kod Geliştirme

Yunus Emre Güzel
1 Ocak 202512 dkTypeScript
TypeScript ve Modern JavaScript ile Güvenli Kod Geliştirme

TypeScript ve Modern JavaScript ile Güvenli Kod Geliştirme

TypeScript, modern web geliştirme dünyasının vazgeçilmez bir parçası haline geldi. Bu makalede, TypeScript'in sağladığı avantajları, modern JavaScript özelliklerini ve güvenli kod geliştirme pratiklerini detaylıca inceleyeceğiz.

TypeScript'in Temel Prensipleri

TypeScript, JavaScript'e statik tip desteği ekleyerek daha güvenli ve ölçeklenebilir kod yazmanıza olanak sağlar.

Neden TypeScript?

  1. Tip Güvenliği

    • Derleme zamanında hata yakalama
    • IntelliSense ve kod tamamlama desteği
    • Daha iyi kod dokümantasyonu
  2. Modern JavaScript Desteği

    • En son ECMAScript özelliklerini kullanabilme
    • Geriye uyumluluk
    • Polyfill ve transpile özellikleri
// Modern TypeScript örneği
interface User {
  id: string;
  name: string;
  email: string;
  preferences?: UserPreferences;
}

interface UserPreferences {
  theme: 'light' | 'dark';
  notifications: boolean;
  language: string;
}

class UserService {
  private users: Map<string, User> = new Map();

  async getUser(id: string): Promise<User | undefined> {
    return this.users.get(id);
  }

  async updateUser(id: string, data: Partial<User>): Promise<User> {
    const user = await this.getUser(id);
    if (!user) throw new Error('User not found');

    const updatedUser = { ...user, ...data };
    this.users.set(id, updatedUser);
    return updatedUser;
  }
}

Modern JavaScript Özellikleri

Modern JavaScript

ES6+ ve Yeni Nesil JavaScript

Destructuring ve Spread Operatörleri

// Modern JavaScript özellikleri
const user = {
  name: 'John Doe',
  age: 30,
  address: {
    city: 'Istanbul',
    country: 'Turkey'
  }
};

// Destructuring
const { name, age, address: { city } } = user;

// Spread operator
const updatedUser = {
  ...user,
  age: 31,
  address: {
    ...user.address,
    postalCode: '34000'
  }
};

Async/Await ve Promise Handling

// Async/Await kullanımı
async function fetchUserData<T>(url: string): Promise<T> {
  try {
    const response = await fetch(url);
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    const data: T = await response.json();
    return data;
  } catch (error) {
    console.error('Fetch error:', error);
    throw error;
  }
}

// Promise.all kullanımı
async function fetchMultipleUsers(ids: string[]): Promise<User[]> {
  const promises = ids.map(id => fetchUserData<User>(`/api/users/${id}`));
  return Promise.all(promises);
}

Tip Güvenliği ve Best Practices

Generic Types

TypeScript'in güçlü generic tip sistemi:

// Generic tip kullanımı
interface Repository<T> {
  getAll(): Promise<T[]>;
  getById(id: string): Promise<T | null>;
  create(item: Omit<T, 'id'>): Promise<T>;
  update(id: string, item: Partial<T>): Promise<T>;
  delete(id: string): Promise<boolean>;
}

class UserRepository implements Repository<User> {
  async getAll(): Promise<User[]> {
    // Implementation
    return [];
  }

  async getById(id: string): Promise<User | null> {
    // Implementation
    return null;
  }

  // Diğer metodlar...
}

Utility Types

TypeScript'in yerleşik utility tipleri:

// Utility types örnekleri
type UserCreateDTO = Omit<User, 'id'>;
type UserUpdateDTO = Partial<User>;
type UserResponse = Pick<User, 'id' | 'name' | 'email'>;
type ReadonlyUser = Readonly<User>;

// Conditional types
type IsString<T> = T extends string ? true : false;
type StringOrNumber<T> = T extends string | number ? T : never;

Performance Optimizasyonu

Memory Management

  1. Referans Yönetimi

    • WeakMap ve WeakSet kullanımı
    • Memory leak önleme
    • Garbage collection optimizasyonu
  2. Data Structures

    • Uygun veri yapılarını seçme
    • Immutable data pattern
    • Performans odaklı algoritmalar
// Performans optimizasyonu örnekleri
class Cache<K, V> {
  private cache: WeakMap<object, V> = new WeakMap();
  private readonly maxSize: number;

  constructor(maxSize: number = 100) {
    this.maxSize = maxSize;
  }

  set(key: K & object, value: V): void {
    if (this.cache.size >= this.maxSize) {
      this.cleanup();
    }
    this.cache.set(key, value);
  }

  get(key: K & object): V | undefined {
    return this.cache.get(key);
  }

  private cleanup(): void {
    // Cleanup logic
  }
}

Testing ve Quality Assurance

Unit Testing

Jest ve TypeScript ile test yazımı:

// Jest ile test örneği
describe('UserService', () => {
  let userService: UserService;

  beforeEach(() => {
    userService = new UserService();
  });

  it('should create a new user', async () => {
    const userData: UserCreateDTO = {
      name: 'John Doe',
      email: 'john@example.com'
    };

    const user = await userService.createUser(userData);
    expect(user).toHaveProperty('id');
    expect(user.name).toBe(userData.name);
  });
});

Tooling ve Development Environment

Development Tools

  1. IDE Integration

    • VSCode TypeScript desteği
    • ESLint ve Prettier entegrasyonu
    • Type checking ve auto-completion
  2. Build Tools

    • Webpack ve TypeScript
    • Babel entegrasyonu
    • Tree shaking optimizasyonu

Sonuç

TypeScript ve modern JavaScript özellikleri, güvenli ve ölçeklenebilir uygulamalar geliştirmek için güçlü araçlar sunar. Tip güvenliği, modern syntax özellikleri ve gelişmiş tooling desteği ile daha kaliteli kod yazabilir ve potansiyel hataları erkenden yakalayabiliriz.

Etiketler: #TypeScript #JavaScript #ES6 #TypeSafety #BestPractices #DesignPatterns #Performance #Tooling #Testing #Development

Kaynaklar