Я писал Discord-бота на TypeScript и добавил команду, которая получает информацию из аэропорта. Единственное, что вам нужно предоставить, это код аэропорта ИКАО (4-значный код, который идентифицирует аэропорт). Теперь: очевидно, что пользователи могут ошибаться в коде ИКАО и, возможно, давать неверные. Вот почему у меня есть метод, который извлекает объект аэропорта из JSON -файла и выглядит примерно так (не точная копия, но просто чтобы вы поняли это):
public getAirport(icao: string): Airport | undefined {
result = arrayOfAllAirports.find(ap => ap.icao === icao);
return result;
}
В моем командном файле / классе я использую этот метод для очевидного получения аэропорта с заданным кодом ИКАО. Затем я проверяю, не определено ли его возвращаемое значение, и если да, я return *some error*
и все. И это выглядит примерно так:
let airportMgr = new AirportManager();
let airport = airportMgr.getAirport(icao);
if (airport === undefined) {
return *invalid icao error*;
}
*blablabla*
let exampleString = `ICAO: ${airport.icao} | Name: ${airport.name}`;
^error here ^error here
Но в двух файлах / классах, в которых я использую указанный метод вместе с указанными проверками, я получаю сообщение об ошибке ниже, что объект может быть неопределенным. А теперь еще более запутанный момент: несколькими строками ниже. Я снова получаю доступ к некоторому свойству 'airport', и он ничего не говорит.
Теперь я знаю, что могу использовать as Airport
, когда возвращаю аэропорт или переназначаю его и т.д. c, но мне нужен правильный решение, а не обмануть машинописный текст глупыми способами. У кого-нибудь из вас есть идея, как решить эту проблему?
редактировать:
вот изображение того, где это сработало: https://i.stack.imgur.com/tTZyJ.png