Оё ягон вақт истифода бурдани унионҳои дискриминантӣ ва type guards? Кадом type guards-и дарунсохтро медонед?
sobes.tech AI
Ҷавоб аз AI
Дискриминативи юниони (discriminated unions) ва тип гардҳо (type guards) воситаҳои қавии TypeScript барои кор бо юнионҳои типҳо мебошанд, ки имкон медиҳанд, ки ба таври бехатартар муайян кардани типи махсус дар дохили юнион.
Дискриминативи юниони — ин юнионҳои типҳо мебошанд, ки ҳар як тип дорои калиди литералӣ умумӣ (масалан, майдони type), ки тавассути он метавон ба таври ягона муайян кард, ки кадом тип аст.
Гардҳои тип — функсияҳо ё сохторҳое мебошанд, ки дар вақти иҷрои барнома, типи тағйирёбандаро санҷида, онро барои компилятор маҳдуд мекунанд.
Гардҳои дохилӣ дар TypeScript:
typeof— барои типҳои primitives (string,number,boolean)instanceof— барои санҷиши аъзоият ба класаin— барои санҷиши мавҷудияти хосият дар объект
Масалан, як юнион дискриминатсияшуда ва гард барои тип:
interface Чоркунҷа {
kind: 'square';
size: number;
}
interface Давра {
kind: 'circle';
radius: number;
}
type Шакл = Чоркунҷа | Давра;
function майдони(шакл: Шакл): number {
switch (шакл.kind) {
case 'square':
return шакл.size * шакл.size;
case 'circle':
return Math.PI * шакл.radius ** 2;
}
}
Ин ҷо, kind — дискриминатор, ва switch — ҳамчун гард барои тип амал мекунад.
Истифодаи гардҳои дохилии тип:
function астString(қимат: unknown): қимат is string {
return typeof қимат === 'string';
}
if (астString(нечто)) {
// дар ин ҷо, `нечто` — типи string
}