Template literal types — `${string}Id`, Uppercase, Lowercase
CSS property nomlari camelCase da, lekin ma'lumotlar bazasida snake_case. Yoki event nomlari onClick, onChange, onBlur — barchasini qo'lda yozish o'rniga, template literal type orqali avtomatik hosil qilish.
Template literal type sintaksisi
JavaScript template literal kabi — lekin tur darajasida:
type Salomlash = `Salom, ${string}!`;
const a: Salomlash = "Salom, Jasur!"; // ✅
const b: Salomlash = "Xayr, Jasur!"; // ❌ — "Salom, " bilan boshlanmaydi
Union bilan kengayish
type Holat = "yuklanmoqda" | "tayyor" | "xato";
type HolatMsg = `holat: ${Holat}`;
// "holat: yuklanmoqda" | "holat: tayyor" | "holat: xato"
Ikki union birga — Kartezian ko'paytma:
type Tomonlar = "top" | "right" | "bottom" | "left";
type Chegaralar = `border-${Tomonlar}`;
// "border-top" | "border-right" | "border-bottom" | "border-left"
Event handler nomlari
type Hodisalar = "click" | "change" | "focus" | "blur";
type Handler<T extends string> = `on${Capitalize<T>}`;
type ClickHandler = Handler<"click">; // "onClick"
type AllHandlers = Handler<Hodisalar>;
// "onClick" | "onChange" | "onFocus" | "onBlur"
Built-in string utility turlari
type A = Uppercase<"salom">; // "SALOM"
type B = Lowercase<"SALOM">; // "salom"
type C = Capitalize<"ali">; // "Ali"
type D = Uncapitalize<"Ali">; // "ali"
camelCase → snake_case (soddalashtirilgan)
type CamelToSnake<S extends string> =
S extends `${infer Head}${infer Tail}`
? Head extends Uppercase<Head>
? `_${Lowercase<Head>}${CamelToSnake<Tail>}`
: `${Head}${CamelToSnake<Tail>}`
: S;
type A = CamelToSnake<"userName">; // "user_name"
type B = CamelToSnake<"createdAt">; // "created_at"
Amaliy — CSS property olish
type CSSProperty<T extends string> = `--${T}`;
type Colors = "primary" | "secondary" | "accent";
type CSSVars = CSSProperty<Colors>;
// "--primary" | "--secondary" | "--accent"
Xulosa
// Asosiy
type T = `${string}Id`; // har qanday string + "Id"
type T = `on${Capitalize<E>}`; // event handlers
// Built-in
Uppercase<"abc"> // "ABC"
Lowercase<"ABC"> // "abc"
Capitalize<"abc"> // "Abc"
Uncapitalize<"Abc"> // "abc"
// Union bilan — kartezian
type T = `${A | B}-${C | D}`; // A*C, A*D, B*C, B*D kombinatsiyalari
Keyingi dars
49-dars: Recursive types — o'ziga murojaat qiladigan turlar