interface Teacher {
name: string;
age: number;
teaching: () => void;
}
interface Student {
name: string;
age: number;
learning: () => void;
}
type Person = Teacher | Student;
const p = (person: Person) => {
// 类型“Person”上不存在属性“learning”。
// 类型“Teacher”上不存在属性“learning”。
person.learning();
};
const p = (person: Person) => {
if ("teaching" in person) {
person.teaching();
}
if ("learning" in person) {
person.learning();
}
};
const p = (person: Person) => {
const teacher = person as Teacher;
const student = person as Student;
if (teacher.teaching) {
teacher.teaching();
} else if (student.learning) {
student.learning();
}
};
const isTeacher = (person: Person): person is Teacher => {
return (person as Teacher).teaching !== undefined;
};
const p = (person: Person) => {
if (isTeacher(person)) {
person.teaching();
} else {
person.learning();
}
};