URL 类不接受 window.location 作为基本 URL

Sal*_*vic 5 javascript typescript

为什么 typescript 在 window.location 处抱怨:

const url = new URL("/somepath", window.location);
Run Code Online (Sandbox Code Playgroud)

“Location”类型的参数不可分配给“string |”类型的参数 网址'。“位置”类型缺少“URL”类型中的以下属性:密码、searchParams、用户名、toJSONts(2345

但这是完全有效的 JS 吗?

const url = new URL("/somepath", window.location);
Run Code Online (Sandbox Code Playgroud)

我发现 window.location 丢失了password, searchParams, username, toJSON,但似乎这些与使用 URL 无关?

问题:

这是 Typescript 的问题还是 URL 接受 window.location-object 是巧合

Dea*_*mes 6

这是 TypeScript 的事情。在 JavaScript 中,window.location是一个对象。然而,当直接调用它时,它提供了href属性 - 最简单的思考方法是该.toString()方法返回该href属性。您应该href直接调用该属性:

const url = new URL("/somepath", window.location.href);
Run Code Online (Sandbox Code Playgroud)

可以location通过强制其为 来直接使用any,或者通过unknownthenstring类型来使用,但这只是开始偏离 TypeScript 的本意:

// An any type
const url = new URL("/somepath", window.location as any);

// An unknown then string type
const url = new URL("/somepath", window.location as unknown as string);
Run Code Online (Sandbox Code Playgroud)