(Если вы найдете имя получше, дайте мне знать)
У меня есть функция, которая получает два аргумента: задание и сотрудник. Сотрудник не является обязательным: если работа запланирована, сотрудник будет там, в противном случае он не нужен.
type Job = {
name: string;
schedule?: string;
}
type WorkingEmployee = {
doWork: (jobName: string) => void
}
function f(job: Job, employee?: WorkingEmployee){
if (job.schedule) {
if (employee) {
employe.do(job.name)
}
}
}
Однако я знаю больше. Я знаю, что если работа запланирована, то сотрудник будет. Итак, я хочу добиться этого и воспользоваться этими знаниями:
type ScheduledJob = {
task: string;
isDoable: string;
}
type Employee<T> = T extends ScheduledJob ? WorkingEmployee : undefined;
function f<T extends Job>(job: T, employee: Employee<T>){
if (job.schedule) {
employee.doWork(job.name);
}
}
Но машинописный текст не принимает: "Object is possibly undefined"
, имея в виду employee.doWork
. Почему не принимает? Если schedule
там, то мы точно знаем, что employee
не undefined
.
Мои вопросы: 1. Почему компилятор не принимает этот код? 2. Есть ли способ достичь того, что я пытаюсь сделать здесь?