Cem Kaan
Cem Kaan

Reputation: 2236

How to get number from promise?

Why does typescript says?

let shouldbeNumber: number Type 'unknown' is not assignable to type 'number'.Vetur(2322)

turnIntoNumberwill always get strings of numbers such as 1,2,3,4,5,6... , so I know shouldbeNumber will always be a number. How can I convince typescript or develop this piece of code? :-)

async function makeMagic() {
  let shouldbeNumber: number = await turnIntoNumber("2");
}
function turnIntoNumber(get) {
  return new Promise((resolve, reject) => {
    let shouldbeNumber : number =  Number(get);
    resolve(shouldbeNumber);
  });
}

Would you please help me to turn this javascript into a better typescript? Thanks in advance.

Upvotes: 4

Views: 11086

Answers (3)

Shubham Dixit
Shubham Dixit

Reputation: 1

The return type of async function will always be wrapped in promise .So whether its JS or TS you cant return something which is not wrapped in promise.You can try something like below

async function makeMagic(): Promise<number> {
    let num: number;
    num = await turnIntoNumber("2");
    console.log(num);
    return num;
}
function turnIntoNumber(get:string) :Promise<number> {
  return new Promise((resolve, reject) => {
    let shouldbeNumber : number =  Number(get);
    resolve(shouldbeNumber);
  });
}

makeMagic().then(data => {
    console.log(data);
})

StackBlitz Link

Upvotes: 2

PaulB
PaulB

Reputation: 24382

Annotate the functions return type

function turnIntoNumber(get) : Promise<number> {
  return new Promise((resolve, reject) => {
    let shouldbeNumber : number =  Number(get);
    resolve(shouldbeNumber);
  });
}

Upvotes: 5

user78403
user78403

Reputation: 352

You can annotate the type of resolve:

async function makeMagic() {
  let shouldbeNumber: number = await turnIntoNumber("2");
}
function turnIntoNumber(get) {
  return new Promise((resolve: (value: number) => void, reject) => {
    let shouldbeNumber : number =  Number(get);
    resolve(shouldbeNumber);
  });
}

Upvotes: 3

Related Questions