Obyektni inline tarzda tiplash
Har doim ham nomlangan interfeys kerak emas. Bir martalik holat uchun obyektning shaklini bevosita yozishingiz mumkin:
function printPoint(point: { x: number; y: number }) {
console.log(point.x, point.y);
}
printPoint({ x: 1, y: 2 }); // ok
printPoint({ x: 1 }); // Error: missing 'y'Bu inline shakl kichik, lokal shakllar uchun qulay. Shakl qayta ishlatilganda uni takrorlash o'rniga unga interface (yoki type alias) orqali nom bering.
Optional va readonly xususiyatlari
Doimiy ravishda ishlatadigan ikkita modifikator. ? xususiyatni ixtiyoriy qiladi; readonly esa uni yaratilgandan keyin qayta tayinlanishidan to'sadi:
interface Product {
readonly id: number; // set once, never changed
name: string;
discount?: number; // may be absent
}
const p: Product = { id: 1, name: "Book" };
p.name = "New Book"; // ok
p.id = 2; // Error: id is readonlyreadonly bu tip darajasidagi himoya — u faqat tekshirish paytida mavjud bo'ladi, biroq u niyatni hujjatlashtiradi va ID kabi narsalarga tasodifiy yozishlarni ushlaydi.
Shakl massivlari
Obyekt tiplarini massiv tiplari bilan birlashtirib, yozuvlar ro'yxatini tasvirlang — bu aynan API qaytaradigan narsa:
interface User {
name: string;
age: number;
}
const users: User[] = [
{ name: "Ada", age: 36 },
{ name: "Alan", age: 41 },
];Endi TypeScript har bir elementni tekshiradi va sizga .map, .filter va shu kabilar ichida avtomatik to'ldirishni beradi:
users.map((u) => u.name.toUpperCase()); // u is a User — fully typedreadonly massivlar
Shuningdek, butun massivni qulflab, uning ichidagilar o'zgarmasligini ta'minlashingiz mumkin:
const primes: readonly number[] = [2, 3, 5];
primes.push(7); // Error: push doesn't exist on a readonly arrayBu hech qachon tasodifan o'zgartirilishini istamaydigan konstantalar uchun juda qulay.
Ichma-ich shakllar
Haqiqiy ma'lumotlar ichma-ich joylashadi — obyektlar ichida obyektlar, obyektlar ichida massivlar. Tiplar ham xuddi shunday ichma-ich joylashadi:
interface Post {
title: string;
tags: string[];
author: {
name: string;
verified: boolean;
};
}
const post: Post = {
title: "Hello",
tags: ["intro", "ts"],
author: { name:
Chuqur ichma-ich joylashgan shakllar uchun ko'pincha har bir darajani o'zining nomlangan interfeysiga (Author, Post) ajratib, ularga havola qilish yanada toza bo'ladi — kichikroq bo'laklarni o'qish va qayta ishlatish osonroq.
Index signaturalar — obyektlar lug'at sifatida
Ba'zan obyektning kalitlari oldindan belgilanmagan bo'ladi (lookup jadval, sanoqlar to'plami). Index signature "har qanday string kalit ushbu qiymat tipiga moslashadi" degan tiplashni beradi:
interface ScoreBoard {
[player: string]: number;
}
const scores: ScoreBoard = {};
scores["ada"] = 10;
scores["alan"] = 7;
scores["ada"] = "high"; // Error: value must be a numberIntervyu maslahatlari
- Bir martalik holatlar uchun obyektlarni inline tiplang; qayta ishlatilganda ularga interfeys orqali nom bering.
?= ixtiyoriy xususiyat,readonly= yaratilgandan keyin qayta tayinlab bo'lmaydi.- Yozuvlar ro'yxatini
Interface[]sifatida tiplang — siz tekshirilgan, avtomatik to'ldiradigan.map/.filterolasiz. - Dinamik kalitli lug'atga o'xshash obyektlar uchun index signature (
[key: string]: number) ishlating.
Muhokama
Hozircha izoh yo‘q
Muhokamada qatnashish uchun tizimga kiring.
KirishHozircha fikr yo‘q
Birinchi bo‘lib yozing: bu mavzuda nima yordam berdi — yoki nimani aniqroq tushuntirish kerak.