'Typescript promise generic type
I've a sample Promise function like below. On success I return a number and on false I return string. The compiler is complaining to specify some kind of generic type to the promise. In this case what type I've to specify? Do I've to specify like Promise<number> or Promise<number | string>?
function test(arg: string): Promise {
return new Promise((resolve, reject) => {
if (arg === "a") {
resolve(1);
} else {
reject("1");
}
});
}
Solution 1:[1]
function test(arg: string) {
return new Promise((resolve: (value: number) => void, reject) => {
if (arg === "a") {
resolve(1);
} else {
reject("1");
}
});
}
Solution 2:[2]
another solution
P.S. (by the way)
Generic type 'Promise' requires 1 type argument(s).ts(2314)
function test(arg: string){
return new Promise<number>((resolve, reject) => {
if (arg === "a") {
resolve(1);
// (parameter) resolve: (value: number | PromiseLike<number>) => void
} else {
// (parameter) reject: (reason?: any) => void
reject("1");
}
});
}
Solution 3:[3]
You could define a custom Promise type that actually also cares about the type of the rejection. You can also just give it a single type and the reject type will be any, like in a normal promise.
type CustomPromise<T, F = any> = {
catch<TResult = never>(
onrejected?: ((reason: F) => TResult | PromiseLike<TResult>) | undefined | null
): Promise<T | TResult>;
} & Promise<T>;
function test(arg: string): CustomPromise<number, string> {
return new Promise((resolve, reject) => {
if (arg === "a") {
resolve(1);
} else {
reject("1");
}
});
}
const myPromise = test("a");
myPromise.then((value) => {}); //value is of type `number`
myPromise.catch((reason) => {}); //reason is of type `string`
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | lynnic |
| Solution 2 | xgqfrms |
| Solution 3 | Nibuja |

