如何解决为什么 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 举报,一经查实,本站将立刻删除。