Type Alias
Өмнөх хичээлүүдэд string | number эсвэл { нэр: string; нас: number } зэрэг төрлүүдийг шууд бичиж байсан. Томоохон кодонд нэг төрлийг олон газар давтан бичвэл хүнд болдог. Type alias ашигласнаар төрлийг нэг удаа тодорхойлж, хаана ч дахин ашиглана.
Type Alias үндэс
type түлхүүр үгийг ашиглан өөрийн нэртэй төрөл үүсгэнэ:
// Alias-гүйгээр — давтагдана
function хэрэглэгч харах(хэрэглэгч: { нэр: string; нас: number; и_мэйл: string }): void {
console.log(хэрэглэгч.нэр);
}
function хэрэглэгч шинэчлэх(хэрэглэгч: { нэр: string; нас: number; и_мэйл: string }): void {
// ...
}
// Type alias-тай — нэг удаа тодорхойлно
type Хэрэглэгч = {
нэр: string;
нас: number;
и_мэйл: string;
};
function хэрэглэгч харах(хэрэглэгч: Хэрэглэгч): void {
console.log(хэрэглэгч.нэр);
}
function хэрэглэгч шинэчлэх(хэрэглэгч: Хэрэглэгч): void {
// ...
}
Хэрэглэгч нэрийг өөрчлөхөд нэг газар засаж бүх хэрэглэгдэх газар шинэчлэгдэнэ. Энэ нь томоохон кодонд маш чухал давуу тал.
Энгийн төрлүүдийг нэрлэх
Type alias зөвхөн объектод хэрэглэгддэггүй. Ямар ч төрлийг нэрлэж болно:
type Нас = number;
type Нэр = string;
type ИдэвхтэйЭсэх = boolean;
const хэрэглэгчийн нас: Нас = 25;
const хэрэглэгчийн нэр: Нэр = "Болд";
const нэвтэрсэн: ИдэвхтэйЭсэх = true;
Энэ нь кодын утгыг тодорхой болгодог. number харахад яг юуг илэрхийлж байгаа нь тодорхойгүй, харин Нас харахад шууд ойлгогдоно.
Union-г нэрлэх
Өмнөх хичээлийн union төрлийг alias-аар нэрлэвэл кодын уншигдах байдал сайжрана:
type Байрлал = "зүүн" | "баруун" | "дээш" | "доош";
type Хариу = "тийм" | "үгүй" | "магадгүй";
type Оролт = string | number | boolean;
function шилжих(чиглэл: Байрлал): void {
console.log(`${чиглэл} тийш шилжиж байна`);
}
шилжих("зүүн"); // зөв
шилжих("хойш"); // Алдаа! Байрлал-д "хойш" байхгүй
Байрлал нэр нь функцийн параметрийн утгыг тэр дор нь тайлбарлаж байна — коммент бичихгүйгээр.
Объект дотор объект
Type alias-г давхарлан хэрэглэж болно:
type Хаяг = {
гудамж: string;
дүүрэг: string;
хот: string;
};
type Хэрэглэгч = {
нэр: string;
нас: number;
хаяг: Хаяг; // Хаяг alias-г дотор нь ашиглана
};
const хэрэглэгч: Хэрэглэгч = {
нэр: "Мөнхбат",
нас: 32,
хаяг: {
гудамж: "Энхтайвны өргөн чөлөө 5",
дүүрэг: "Хан-Уул",
хот: "Улаанбаатар",
},
};
console.log(хэрэглэгч.хаяг.хот); // "Улаанбаатар"
Хаяг-г тусад нь тодорхойлсноор өөр газарт (жишээ нь Дэлгүүр, Оффис) дахин ашиглаж болно.
Функцийн төрлийг нэрлэх
Функцийн гарын үсгийг ч alias болгож болно:
type Тооцоологч = (а: number, б: number) => number;
const нэмэх: Тооцоологч = (а, б) => а + б;
const хасах: Тооцоологч = (а, б) => а - б;
const үржүүлэх: Тооцоологч = (а, б) => а * б;
console.log(нэмэх(10, 5)); // 15
console.log(хасах(10, 5)); // 5
console.log(үржүүлэх(10, 5)); // 50
Тооцоологч нэр нь гурван функц нэг адил гарын үсэгтэй гэдгийг харуулж байна.
Generic-тэй type alias
Generic ашигласнаар дахин ашиглагдах ерөнхий alias үүсгэж болно. Generic-г дараагийн хичээлүүдэд дэлгэрэнгүй судална — одоохондоо энгийн жишээ харцгааё:
type Хариу<Т> = {
өгөгдөл: Т;
амжилттай: boolean;
алдаа: string | null;
};
type ХэрэглэгчийнХариу = Хариу<Хэрэглэгч>;
type ТоонХариу = Хариу<number>;
const хариу: ХэрэглэгчийнХариу = {
өгөгдөл: { нэр: "Болд", нас: 25, и_мэйл: "bold@example.com" },
амжилттай: true,
алдаа: null,
};
<Т> бол "placeholder" — ямар ч төрлийг оруулж болно. API хариуг хадгалахад энэ хэв маяг маш өргөн хэрэглэгддэг.
Type Alias ба Interface-ийн ялгаа
Type alias-тай адил зорилготой interface гэж бас байдаг. Нарийн ялгааг 12-р хичээлд судална — одоохондоо дараах ерөнхий дүрмийг санаарай:
| Хэрэглэх тохиолдол | Зөвлөмж | | ------------------------------------- | ---------- | | Объектын бүтэц тодорхойлох | Interface | | Union, intersection, primitive нэрлэх | Type alias | | Функцийн гарын үсэг нэрлэх | Type alias | | Generic-тэй ерөнхий хэв маяг | Type alias |
Дараагийн хичээлд:
TypeScript-ийн объект бүтцийг тодорхойлох хамгийн нийтлэг хэрэгсэл болох Interface-г дэлгэрэнгүй судална. Type alias-тай ямар ялгаатай, хэзээ аль нэгийг нь сонгох вэ?