VJA*_*JAI 29 generics typescript
我有一个示例Promise函数,如下所示.在成功的时候我会回来number并且假的我会回来string.编译器抱怨要为promise指定某种泛型类型.在这种情况下,我要指定什么类型?我要指定喜欢Promise<number>还是Promise<number | string>?
function test(arg: string): Promise {
return new Promise((resolve, reject) => {
if (arg === "a") {
resolve(1);
} else {
reject("1");
}
});
}
Run Code Online (Sandbox Code Playgroud)
小智 68
Promise的泛型类型应该对应于函数的非错误返回类型.该错误是隐式的类型any,并未在Promise泛型类型中指定.
例如:
function test(arg: string): Promise<number> {
return new Promise<number>((resolve, reject) => {
if (arg === "a") {
resolve(1);
} else {
reject("1");
}
});
}
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以定义一个自定义的 Promise 类型,它实际上也关心拒绝的类型。您也可以只给它一个单一类型,拒绝类型将为any,就像正常的承诺一样。
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`
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28172 次 |
| 最近记录: |