Dan*_*Dan 6 typescript angular-services angular-promise typescript-generics typescript2.0
简单且常见的 Angular2+ 数据服务,处理错误并使用 Promises:
// imports skipped
class DataType {}
class Error {
constructor(error: HttpResponse) {
this.error = error.json()
}
}
@Injectable()
export class MyService<DataType> {
apiUrl = 'my/url';
constructor(protected http) {}
get(): Promise<DataType[] | Error> {
return this.http
.get(this.apiUrl)
.toPromise()
.then(response => response.json())
.catch(this.handleError);
}
protected handleError(error: HttpResponse): Promise<Error> {
console.error('An error occurred', error);
return Promise.reject(new Error(error));
}
}
Run Code Online (Sandbox Code Playgroud)
在此类中,get方法返回一个 Promise,它用数组解析DataType[],并用Error类型拒绝。
编译此代码,我收到此错误:
输入“错误| DataType[]' 不可分配给类型“DataType”。类型“Error”不可分配给类型“DataType”。
我正在使用 TypeScript 版本 2.4.2。我确信这种情况是在 TypeScript 升级之后开始发生的,这使得类型检查更加严格。
我想知道如何处理最新 TypeScript 中不同类型的拒绝。这样做有不同的做法吗?
更新:我找到了相应的错误报告,尚未解决https://github.com/Microsoft/TypeScript/issues/7588
我创建了一个存储库来演示该问题,并进行了两次提交。第一次提交使用<TypeResolve | TypeReject>方法,第二次<TypeResolved>仅使用。这两个提交似乎在现实生活中都无法编译。
for 的类型参数Promise只是 for 的类型.resolve,而不是 for 的类型.reject。的类型.reject始终为any,因为在编译时无法知道该类型。原因之一是async返回 Promise 的函数可能会拒绝它们的 Promise,但有任何异常。
您应该Promise<DataType[]>改为编写,并在处理错误的运行时检查错误类型。
| 归档时间: |
|
| 查看次数: |
4179 次 |
| 最近记录: |