看到大牛的代码Promise<IResponse<T>>
,不太明白。
Promise<T> 是 ES2015 自带类型,在 TS 标准库中就有。
参见:https://segmentfault.com/q/10...
如果要支持这种类型Promise<IResponse<T>>
还需要写哪些代码?
个人观点:Promise<IResponse<T>> 是Promise<T>的一种,其中前面的IResponse<T>相当于后面的T,也就是需要实现IResponse<T>。
看到大牛的代码Promise<IResponse<T>>
,不太明白。
Promise<T> 是 ES2015 自带类型,在 TS 标准库中就有。
参见:https://segmentfault.com/q/10...
如果要支持这种类型Promise<IResponse<T>>
还需要写哪些代码?
个人观点:Promise<IResponse<T>> 是Promise<T>的一种,其中前面的IResponse<T>相当于后面的T,也就是需要实现IResponse<T>。
有点似是而非的感觉,这个事情其实和Promise<T>没什么关系,就是最简单的泛型定义,比如Array<T>。
// 不使用泛型的声明
type A = {name: string; contact: number;}
type B = {name: string; contact: string;}
const a: A = {name: 'A', contact: 138};
const b: B = {name: 'B', contact: 't@a.b'};
// 使用泛型
type A<T> = {name: string; contact: T}
const a: A<string> = {name: 'A', contact: 't@a.b'};
对于你的例子其实很常见,由于后端是统一输出的,所以
type IResponse<T> = {
code: string; // 错误码
success: boolean;
message?: string;
data: T; // data的类型是根据请求的API决定的
}
// 当你定义数据请求接口时就可以
function getUser(id: string): Promise<IResponse<User>>
function getUserList(): Promise<IResponse<Array<Client>>>
我实际项目中定义了ResponseObject<T>和ResponseList<T>,两者的区别就是data: T
和data: Array<T>
,目的就是懒得写成ResponseObject<Array<T>>
。
6 回答5.4k 阅读✓ 已解决
9 回答9.6k 阅读
3 回答10.6k 阅读✓ 已解决
4 回答7.5k 阅读
5 回答8.4k 阅读
2 回答10.5k 阅读✓ 已解决
2 回答6.7k 阅读✓ 已解决
你看到的代码大概应该是这样的:
你的个人观点没啥问题,就是个封装而已。