Menu

TypeScript Type Alias: type Anahtar Kelimesi ve Örnekler

Bir type alias, type anahtar kelimesiyle herhangi bir tipe ad verir: nesne biçimleri, union'lar, tuple'lar, fonksiyonlar, generic'ler ve özyinelemeli tipler. Sözdizimini, her biçimin nasıl göründüğünü ve bir alias'ın neden yalnızca bir ad olduğunu, yeni ve ayrı bir tip olmadığını öğrenin.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

Bir type alias bir tipe ad verir. type Name = ... yazarsınız ve o andan itibaren Name bir tip beklenen her yerde kullanılabilir. Bir interface'in aksine bir alias yalnızca nesne biçimlerine değil, herhangi bir tipe ad verebilir.

Alias'lar yalnızca derleme zamanında vardır. Üretilen JavaScript bu type satırlarının hiçbirini içermez.

Sözdizimi

type Name = SomeType;
type Name<T> = SomeTypeUsing<T>;       // generic
export type Name = SomeType;           // exported from a module

Adlar geleneksel olarak PascalCase yazılır. Sağ taraf herhangi bir tip ifadesidir ve bir alias diğer alias'ları, kendisi de dahil, kullanabilir (aşağıdaki özyinelemeli tiplere bakın). Alias bildirildiği kapsamın tamamında, bildirim satırının üstünde bile kullanılabilir, çünkü tipler derleme zamanında kontrol edilir ve const veya let gibi sırayla çalıştırılmaz.

Nesne Tipleri

Bir nesne biçimi için alias ve interface neredeyse aynı şekilde yazılır. Alias = kullanır ve genellikle bir noktalı virgülle biter.

Bir alias extends kullanamaz; bu rolü & intersection'ı üstlenir. Fazla özellik kontrolleri, opsiyonel ve readonly özellikler interface'lerdeki gibi aynen çalışır. Nesne biçimleri için ikisinden hangisinin seçileceği interface ile type sayfasında anlatılıyor.

Union'lar, Tuple'lar ve Fonksiyonlar

Bunlar yalnızca bir alias'ın ad verebildiği durumlardır ve type anahtar kelimesinin var olmasının ana nedenidir. Bir union alias'ı alternatifleri listeler, bir tuple alias'ı bir dizinin uzunluğunu ve eleman tiplerini sabitler, bir fonksiyon alias'ı da bir imzayı tanımlar.

scale içinde parametrelerin notasyona ihtiyacı yoktur: tiplerini Transform alias'ı sağlar. Tuple sözdizimi tuple'lar sayfasında, union daraltma da union tipler sayfasında anlatılıyor.

Generic Type Alias'lar

Tip parametreleri tek bir alias'ın pek çok tiple çalışmasını sağlar. Fonksiyon parametreleri gibi varsayılanları olabilir.

Result<number> varsayılan E = string değerini kullanır. type Nullable<T> = T | null veya type Dict<T> = Record<string, T> gibi küçük generic alias'lar gerçek kodda yaygındır. Yerleşik utility tipler (Partial<T>, Pick<T, K>, ReturnType<F>) de standart kütüphanede bildirilmiş generic alias'lardır.

Alias'lar Addır, Yeni Tip Değildir

Bir alias ayrı bir tip oluşturmaz. Sağdaki tipin ikinci bir adıdır ve derleyici ikisini aynı kabul eder. string tipinin iki alias'ı birbirinin yerine tamamen kullanılabilir:

Bu kod hatasız şekilde cancelling u_42 yazdırır; bir alias'ın önleyemediği hata da budur. Alias yine de okuyuculara yardım eder (OrderId olarak tiplenmiş bir parametre string tipinden daha fazlasını söyler), ama iki kimliği karıştırmak bir derleme hatası olmak zorundaysa string & { readonly __brand: "OrderId" } gibi branded bir tip kullanın.

Özyinelemeli Type Alias'lar

Bir alias kendine başvurabilir; ağaçları, iç içe listeleri ve JSON'u böyle tanımlarsınız:

Json alias'ı JSON'un temsil edemediği değerleri reddeder: Json tipine atanan { when: new Date() } veya { f: undefined } derleme hatalarıdır (TS2322).

Değerlerden Tipler: typeof

Bir değer zaten varsa, tipini yazmak yerine ona ad verebilirsiniz. typeof tip operatörü bir değişkenin tipini okur ve diğer operatörlerle birleşir:

const defaults = { retries: 3, verbose: false, level: "info" };

type Options = typeof defaults;
// { retries: number; verbose: boolean; level: string }

type OptionKey = keyof typeof defaults;
// "retries" | "verbose" | "level"

function start(port: number) {
  return { port, startedAt: new Date() };
}
type Server = ReturnType<typeof start>;
// { port: number; startedAt: Date }

Değer tek doğruluk kaynağı olarak kalır: defaults nesnesine bir özellik ekleyin, Options da onu izler. Daha fazlası typeof sayfasında.

Alias'ları Export ve Import Etmek

Alias'lar değerler gibi export ve import edilir. import type, yalnızca bir tipin import edildiğini açıkça belirtir, böylece import her zaman JavaScript çıktısından kaldırılır:

// shapes.ts
export type Point = { x: number; y: number };
export type Shape = { kind: "circle"; center: Point; radius: number };

// main.ts
import type { Point, Shape } from "./shapes.js";

const p: Point = { x: 1, y: 2 };

Sıkça Sorulan Sorular

TypeScript'te type alias nedir?

Type alias, type anahtar kelimesiyle bildirilen bir tip adıdır: type Point = { x: number; y: number }. Bundan sonra Point, bir tip beklenen her yerde kullanılabilir. Herhangi bir tipe ad verebilir: bir nesne biçimi, bir union, bir tuple, bir fonksiyon imzası, bir primitive ya da generic bir tip.

Bir type alias yeni bir tip oluşturur mu?

Hayır. Bir alias, mevcut bir tipin yalnızca başka bir adıdır. type UserId = string ve type OrderId = string ile bir UserId, OrderId beklenen yere verilebilir, çünkü ikisi de sadece string tipidir. Birbirinin yerine geçemeyen tipler yapmak için branded bir tip kullanın.

Bir type alias kendine başvurabilir mi?

Evet, kendine başvuru bir nesne tipinin, bir dizinin ya da bir tuple'ın içinde olduğu sürece: type TreeNode = { value: number; children: TreeNode[] } ve Json[] içeren bir Json alias'ı ikisi de çalışır. type Loop = Loop | string gibi çıplak bir başvuru TS2456 hatasıdır, Type alias 'Loop' circularly references itself.

Bir type alias generic olabilir mi?

Evet. Tip parametrelerini addan sonra yazın: type Box<T> = { value: T }, sonra Box<number> olarak kullanın. Parametrelerin varsayılanları (type Result<T, E = string> = ...) ve kısıtları (type Keys<T extends object> = keyof T) olabilir.

Mevcut bir nesneden nasıl tip elde ederim?

typeof tip operatörünü kullanın: const defaults = { retries: 3, verbose: false }; type Options = typeof defaults; ifadesi { retries: number; verbose: boolean } verir. Değer önce geldiğinde bu, tek bir doğruluk kaynağı korur.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA