Async/await вам в этом случае не поможет, необходимо переделать реализацию под промисы
Статься про промисы
Касательно решения: вам необходимо резолвить промис со значением в виде обьекта с необходимыми данными, промис резолвится функцией
resolve, которая передается первым аргументом коллбека, передаваемого в конструктор промиса:
interface IImageSize {
width: number;
height: number;
}
const getImageSize = (imageDataUrl: string): Promise<IImageSize> =>
new Promise((resolve): void => {
//Создаем промис, его же и возвращаем
const image = new Image();
image.src = imageDataUrl;
image.onload = () => {
const { width, height } = image;
const imageSize: IImageSize = {
width,
height,
};
resolve(imageSize); // резолвим промис с необходимым нам обьектом
};
});
// вызываем функцию либо внутри другой асинхронной функции, дабы был доступен оператор await
const anyFunction = async (): Promise<void> => {
const imageSize: IImageSize = await getImageSize("<any_image_url>");
const { width, height } = imageSize;
};
//либо поступаем как с любым другим промисом
getImageSize("<any_image_url>").then((imageSize: IImageSize): void => {
const { width, height } = imageSize;
});