0Pricing
TypeScript Academy · Ders

Paylaşılan Türler Paketi Stratejisi

Monorepo genelinde kullanılacak özel bir türler paketi oluşturun

Paylaşılan Türler Paketi Stratejisi, CoddyKit'te ücretsiz bir TypeScript 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, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 4 dersten oluşur.

Neden Paylaşılan Bir Türler Paketi?

Türleri ön yüz ve arka uç arasında paylaşmak, API sözleşmeleri arasındaki sapmayı ortadan kaldırır. Tek bir doğruluk kaynağı, API biçimi değiştiğinde derleme zamanında hatalar oluşmasını sağlar.

// packages/types/src/index.ts
export interface User { id: string; name: string; email: string; }
export interface ApiResponse<T> { data: T; error?: string; }

Paket Yapısı

Türler paketini yalın tutun: yalnızca tür dışa aktarımları içersin, çalışma zamanı mantığı içermesin. Böylece paket yan etkisiz ve ağaç budamaya uygun kalır.

packages/types/
├── src/
│   ├── index.ts      # re-exports all
│   ├── user.ts
│   ├── product.ts
│   └── api.ts
├── tsconfig.json
└── package.json

Türler Paketi için tsconfig

JavaScript üretilmemesi, yalnızca tüketicilerin başvurduğu .d.ts dosyalarının üretilmesi için emitDeclarationOnly seçeneğini etkinleştirin.

{
  "compilerOptions": {
    "composite": true,
    "declaration": true,
    "emitDeclarationOnly": true,
    "outDir": "./dist",
    "rootDir": "./src"
  }
}

Türler Paketini Kullanma

Türler paketine hem API'den hem de web uygulamasından başvurun ve çalışma zamanı yükünü önlemek için türleri import type ile içe aktarın.

import type { User, ApiResponse } from "@myapp/types";

async function getUser(id: string): Promise<ApiResponse<User>> {
  // ...
}

Türlerin Serileştirmeye Uygun Kalmasını Sağlama

İstemci ve sunucu arasında paylaşılan türler yalnızca JSON ile serileştirilebilen değerleri içermelidir. Date nesnelerinden kaçının; bunun yerine string (ISO) kullanın.

// Good: serialization-safe
interface Event { id: string; createdAt: string; /* ISO date */ }
// Bad: Date is not JSON-serializable
interface Event { id: string; createdAt: Date; }

Türler Paketini Sürümleme

Türler paketinizi anlamsal sürümlemeyle sürümleyin. Bir alanın kaldırılması veya yeniden adlandırılması gibi geriye dönük uyumsuz bir değişiklik, ana sürüm artışıdır.

# Breaking change: major bump
npm version major
# Adding optional fields: minor bump
npm version minor

OpenAPI'den Türler Üretme

openapi-typescript kullanarak türler paketini bir OpenAPI belirtiminden üretmeyi otomatikleştirin. Bu, türlerin her zaman arka uçla eşleşmesini garanti eder.

npx openapi-typescript ./api/openapi.yaml -o ./packages/types/src/api.ts

Çalışma Zamanı ve Derleme Zamanı Türleri için Zod Kullanma

Türleri Zod şemalarıyla tanımlayın ve TypeScript türlerini bunlardan çıkarın. Hem çalışma zamanı doğrulaması hem de statik türler aynı kaynaktan gelir.

import { z } from "zod";
export const UserSchema = z.object({ id: z.string(), name: z.string() });
export type User = z.infer<typeof UserSchema>;

Döngüsel Bağımlılıklardan Kaçınma

Döngüsel bağımlılık zincirlerini önlemek için türler paketi diğer çalışma alanı paketlerinden içe aktarma yapmamalıdır. Bu paketi bağımlılık grafiğinde bir yaprak düğüm olarak tutun.

// types/ should not import from ui/ or api/
// ui/ and api/ both import from types/

Tür Doğruluğunu Sınama

Paylaşılan türlerin beklentilerle eşleştiğini doğrulayan tür düzeyi savlar yazmak için tsd kullanın.

import { expectType } from "tsd";
import type { User } from "@myapp/types";
expectType<User>({ id: "1", name: "Alice", email: "a@b.com" });

Özet: Paylaşılan Türler Stratejisi

Paylaşılan bir türler paketi API sapmasını ortadan kaldırır: yalnızca bildirimleri üretin, türleri JSON ile serileştirilebilir tutun, anlamsal sürümlemeyle sürümleyin, isteğe bağlı olarak OpenAPI'den otomatik üretin ve tsd ile sınayın.

Kısa Denetim

Paylaşılan API türleri neden Date yerine string kullanmalıdır?

Öğrendikleriniz

Paylaşılan bir türler paketi, API sözleşmeleri için tek bir doğruluk kaynağıdır. Paketi yalnızca bildirim içerecek, JSON ile serileştirilebilecek ve anlamsal sürümlemeyle sürümlenecek şekilde tutun; ön ve arka uç arasındaki sapmayı ortadan kaldırmak için isteğe bağlı olarak OpenAPI'den üretin.

Sıkça Sorulan Sorular

“Paylaşılan Türler Paketi Stratejisi” dersi ücretsiz mi?

Evet — “Paylaşılan Türler Paketi Stratejisi” 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 TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 4 dersten oluşur.

“Paylaşılan Türler Paketi Stratejisi” dersinde ne öğreneceğim?

Monorepo genelinde kullanılacak özel bir türler paketi oluşturun TypeScript 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.

TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te TypeScript 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.

“Paylaşılan Türler Paketi Stratejisi” 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 TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her TypeScript 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

  1. TypeScript Proje Başvurularını Açıklama
  2. TypeScript ile pnpm Çalışma Alanları
  3. Paylaşılan Türler Paketi Stratejisi
  4. Monorepo'larda Artımlı Derlemeler ve Önbellek
← TypeScript Academy Sayfasına Dön