业务背景
用了快2个月typescript
了,感觉自己已经完全会用这玩意儿了.
今天在看别人代码的时候,还是发现很多没用到过的东西.
下面这一项就没看懂
源码
声明
export interface RequestConfig<MockUrl extends string = any, RequestDataOptional extends boolean = any> {
/** 接口 Mock 地址,结尾无 `/` */
mockUrl: MockUrl;
/** 请求数据是否可选 */
requestDataOptional: RequestDataOptional;
}
调用
type PetRequestConfig = Readonly<
RequestConfig<'http://yapi.jixugou.cn/mock/47', '', 'http://www.baidu.com', '/pet', 'data', string, string, false>
>
我的思路
RequestConfig<MockUrl extends string = any
- 声明了一个名叫
RequestConfig
的接口 - 这是一个泛型接口
- 其中一个泛型类型叫
MockUrl
- 用string类型来约束这个
MockUrl
- ??? 后面又给了一个
any
的默认值
我的问题
= any
给个any的默认值是啥意思?有啥用?既然要用string来约束这个泛型类型,为什么不直接使用string类型呢
- 比如
RequestConfig<MockUrl extends string = any { mockUrl: string; }
- 比如
- 调用泛型接口时,传递的应该是类型,为啥直接传值了
MockUrl 是一个继承 string 类型的类型,可以是 string 类型,但不一定是 string 类型。
比如 'http://yapi.jixugou.cn/mock/47' 是一个“类型”,这个类型的值只能是"http://yapi.jixugou.cn/mock/47",它继承于string类型,但你不能说它就是 string 类型,因为其它 string 类型的变量和这个类型的变量类型不兼容。
= any 就更好理解,如果你不传,这个类型就是 any,当然理论上这里用 string 更恰当一些。