typescript - 为什么我需要在 Typescript 中输入 cast?

标签 typescript

我有一个简单的问题,我是 TS 的新手。在任何地方都找不到任何明确的解释,这令人惊讶。

以这种方式告诉 TS 类型的主要区别是什么:

const ul = document.querySelector('#nav') as HTMLUListElement;

这样:

const ul: HTMLUListElement = document.querySelector('#nav');

似乎 TS 可以识别类型并在两种情况下都给我 IntelliSens。如果是这样,为什么我需要像其他开发人员建议的那样在此处使用类型转换?

提前致谢。

最佳答案

“querySelector 方法返回 Element |无效的。” https://stackoverflow.com/a/43035645/12239744

当使用“as”时,您会强制将右侧值赋给此转换。

但是“:HTMLUlistElement” 仅当这是 Element 类的继承类时才有效。可以看到htmlelement的结构https://developer.mozilla.org/en-US/docs/Web/API/HTMLUListElement

queryselector 返回 Element,所以我们可以使用“:HTMLUListElement” 如果这返回任何或 AppleClass,则不能使用此方法。您应该使用“as”,但如果您不知道确切的返回类型是什么。 “作为”可能是危险的。您可以将 AppleClass 转换为 HtmlElement,但此对象可能没有必要的属性。

我认为“as”不适合你的情况,另一个更好。

编辑:https://www.typescripttutorial.net/typescript-tutorial/type-casting/ “:HTMLUListElement”的用法是向下转换。

关于typescript - 为什么我需要在 Typescript 中输入 cast?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64999165/

相关文章:

typescript 函数重载奇怪的行为

javascript - 如何避免 ` PromiseRejectionHandledWarning: Promise rejection was handled asynchronously`?

Angular 5 服务无法通过单元测试(NullInjectorError : No provider for HttpClient!)

Typescript 对类型参数类的泛型约束

reactjs - 带有 props.children 的 Typescript React 功能组件

javascript - TypeScript 经常出现问题并且更喜欢 import 而不是 require

javascript - 通用服务,了解我是在 GRAPHQL 上下文还是 HTTP 上下文中?

css - Angular - 使用变换制作动画,但在动画完成时不应用绝对位置

javascript - 如何在 JavaScript 的回调中调用 typescript 函数

typescript - 如何使用语言服务器协议(protocol)将 TS 解析为符号?