Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
535 views
in Technique[技术] by (71.8m points)

[已解决]typescript中泛型约束后面带了个默认值是啥意思?

业务背景

用了快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; }
  • 调用泛型接口时,传递的应该是类型,为啥直接传值了

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

MockUrl 是一个继承 string 类型的类型,可以是 string 类型,但不一定是 string 类型。

比如 'http://yapi.jixugou.cn/mock/47' 是一个“类型”,这个类型的值只能是"http://yapi.jixugou.cn/mock/47",它继承于string类型,但你不能说它就是 string 类型,因为其它 string 类型的变量和这个类型的变量类型不兼容。

= any 就更好理解,如果你不传,这个类型就是 any,当然理论上这里用 string 更恰当一些。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...