微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 TypeScript 在 node-fetch 中接受 URL

如何解决为什么 TypeScript 在 node-fetch 中接受 URL

在 TypeScript 中,我可以执行以下操作:

const fetchUrl = async () => {
  let url: URL = new URL("http://example.com")
  url.searchParams.set("q","hello")
  url.searchParams.set("a","world!")
  return fetch(url)
}

我想知道为什么会接受这个,因为 fetch 的签名接受 RequestInfo = string | URLLike | Request 的联合类型作为第一个参数。我假设 URL-Type 匹配 URLLike 这只是一个接口

interface URLLike {
    href: string;
}

但是由于 URL 不是从 URLLike 扩展,所以它应该匹配对我来说似乎很奇怪。这是关于两种类型中都存在的 href 变量吗?

解决方法

TypeScript 使用结构类型而不是名义类型。这意味着只有形状很重要。 URLLike 被定义为具有字符串类型的 href 属性的形状,因此绝对具有字符串类型的 href 属性的任何类型都可以。

其他语言(如 Java)名义上是类型化的,这里的名称很重要。因此,只有明确表示实现 URLLike 的类型才是有效的。

你可以把它想象成编译时鸭子类型。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。