在Angular"英雄之旅"教程中,定义了一个返回lambda:
的错误处理程序方法private handleError<T>(operation = 'operation', result?: T) {
return (error: any): Observable<T> => {
this.log(`${operation} failed: ${error.message}`);
return of(result as T);
};
handleError
方法没有返回类型,因此推断出来。如果我们想让它明确,那么返回类型会是什么?我已经尝试过功能(lib.es2015.core.d.ts),但这不起作用。
将lambda本身作为返回类型添加有效,但似乎错了:
private handleError<T>(operation = 'operation', result?: T): (error: any) => Observable<T> {
return (error: any): Observable<T> => {
...
lambda的正确Typescript类型是什么?在Java中,handleError将返回java.util.function.Function。打字稿中有类似的东西吗?谢谢。
答案 0 :(得分:2)
在Javascript中,所有函数都是rm -rf $HOME/.npm/x
类型,因此在运行时它们都是相同的类型(与Java不同,它们是不同的类型)。现在,Typescript可以让你区分不同的函数签名,但这只是一个编译时间的区别,在运行时它们都是Function
。我们编写此类签名的一般方法是Function
。
在你的情况下,lambda的签名已在回报中拼写出来,所以当你写作时你就是核心
(paramList) => returnType
如果你发现一遍又一遍地使用相同的函数签名,你可以写一个类型别名,但这只是一个简单的基本相同的东西,一个函数签名:
private handleError<T>(operation = 'operation', result?: T): (error: any) => Observable<T> {
return (error) => { // We can let inference work here, the return type will be enforced.
...