我有一个示例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) 在Java中,我将这样声明一个函数:
public boolean Test(boolean test) throws Exception {
if (test == true)
return false;
throw new Exception();
}
Run Code Online (Sandbox Code Playgroud)
而且我可以使用此功能而无需处理异常。
如果可能,如何在Typescript中执行相同的操作?编译器会告诉我,如果没有try / catch,我将无法使用该函数。
鉴于此代码:
function asyncFoo() {
return new Promise(function (fulfill, reject) {
doAsyncStuff(function(err, data) {
if(err) reject(new Error(err));
else fulfill(new Bar(data));
});
});
}
Run Code Online (Sandbox Code Playgroud)
我如何记录asyncFoo将返回一个Promise,当满足时将产生一个实例Bar,并且当被拒绝时将产生一个实例Error?
/**
* @return << Here, what do I have to write? >>
*/
function asyncFoo() { ... }
Run Code Online (Sandbox Code Playgroud) 考虑一个自定义useSignUp钩子,该mutate()钩子函数需要一些字段(name在email本例中):
export default function App() {
const name = "David";
const email = "david@gmail.com";
const signupMutation = useSignUp();
return (
<button
onClick={() => {
signupMutation.mutate(
{ name, email },
{
onSuccess: (result) => {
...
},
onError: (result) => {
// Wanted: result of type ErrorResult<"name" | "email">
}
}
);
}}
>
Sign Up
</button>
);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我希望onError的结果是这种类型ErrorResponse<"name" | "email">。但是,我明白了ErrorResponse<string>。
这是为什么?我如何指示 TypeScript 根据传递的数据推断特定的类型(即"name" | …
typescript reactjs typescript-generics react-hooks react-query