Reputation: 2236
Why does typescript says?
let shouldbeNumber: number Type 'unknown' is not assignable to type 'number'.Vetur(2322)
turnIntoNumber
will 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
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
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
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