📌Intro
You write a simple async
function, return 42, and suddenly TypeScript yells:
“Type 'number' is not assignable to type 'Promise'.”
Why can’t an async function just return a value? Let’s break it down.
đź§ Context & Why:
The async
keyword in TypeScript (and JavaScript) changes how the function behaves:
- Every
async
function always returns aPromise<T>
. - Even if you return a raw value, it’s wrapped in
Promise.resolve(value)
.
Examples:
// Normal function
function getFavoriteNumber(): number {
return 26;
}
// Async function
async function getFavoriteNumber(): Promise<number> {
return 26; // Actually Promise.resolve(26)
}
// Arrow version
const getFavoriteNumber = async (): Promise<number> => {
return 26;
};
If you try:
async function getFavoriteNumber(): number {
return 26;
}
TypeScript error:
Type 'number' is not assignable to type 'Promise<number>'.
Real-Life Example:
You might start with a hardcoded value, but later fetch it from an API. Making it async upfront saves refactoring:
const getFavoriteNumber = async (): Promise<number> => {
const res = await fetch("/api/fav-number");
const data = await res.json();
return data.number;
};
đź’ˇThink of async
as a “Promise factory.” Whatever you return gets gift-wrapped in a Promise
.
Top comments (0)