【问题标题】:Why do I need to type cast in Typescript?为什么我需要在 Typescript 中进行类型转换?
【发布时间】:2020-11-25 14:06:37
【问题描述】:

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

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

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

这样:

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

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

提前致谢。

【问题讨论】:

    标签: typescript


    【解决方案1】:

    “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” 的用法是向下转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      相关资源
      最近更新 更多