Доки по разработке
This project is maintained by teniryte
Принципы
contact is Person сообщает компилятору, что внутри ветки объект имеет конкретный тип.isPerson, isOrganization), чтобы покрыть все варианты объединения.if/else, filter и других выражениях, где требуется точное сужение.Пример
interface Person {
firstName: string;
surname: string;
}
interface Organisation {
name: string;
}
type Contact = Person | Organisation;
function isPerson(contact: Contact): contact is Person {
return (contact as Person).firstName !== undefined;
}
function isOrganization(contact: Contact): contact is Organisation {
return (contact as Organisation).name !== undefined;
}
function sayHello(contact: Contact) {
if (isPerson(contact)) {
console.log(contact.firstName);
} else if (isOrganization(contact)) {
console.log(contact.name);
}
}
Практика
as и проверок наличия свойств в коде.boolean: предикат должен отражать реальность проверки.sayHello для вызова обоих вариантов.