当前位置: 首页 > 知识库问答 >
问题:

JS文件中的TS警告:“属性X不存在于类型X上”:是否可以编写更简洁的JavaScript?

薛高澹
2023-03-14

我目前正在发现TypeScript。我使用以下代码:

const someClass = document.querySelector(".that-class");    
const someId = document.getElementById("elemId").value;

正如我之前的许多其他人一样,当然还有更多的人,我得到了以下错误:

Property 'style' does not exist on type 'Element'.
Property 'value' does not exist on type 'HTMLElement'.

我在我的电脑中修复了这些错误。通过添加

我的问题很简单:有没有一种方法可以避免JS文件中出现这些错误(例如:有没有一种“更干净”的方法来编写JavaScript代码)?或者我应该忽略这些警告吗?

非常感谢你的帮助!


共有1个答案

海保臣
2023-03-14

这里有一些好消息:我找到了我想要的答案。

给你一些额外的上下文:我正在处理一个表单,需要使用JavaScript/TypeScript操作一些用户输入。以下是代码:

<form id="my-form" action="index.html" method="get" onsubmit="return showValue();">
    <input type="text" name="username">
    <input type="text" name="full-name">
    <input type="password" name="password">
    <button type="button" onclick="showValue();">Send</button>
</form>

和我的JavaScript代码:

function showValue() {
    const myForm = document.getElementById("my-form").value;
    console.log(myForm);
    return 1;
}

这将返回警告:“属性'value'在类型'HTMLElement'上不存在。

通过在TypeScript中添加此代码的一些变体,可以很容易地解决这个问题:

const myForm = (<HTMLInputElement>document.getElementById("my-form")).value;

太好了,在打字脚本中没有更多的警告。但编译后,生成的JavaScript文件将再次显示警告:“属性“X”在类型X上不存在”

因此,我的问题是,我如何编写我的代码,这样我就不会收到任何警告?

我希望能找到如下答案:

function showValue() {
    const myForm = document.forms.my-form;
    console.log(myForm?.username.value);
    return 1;
}

我花了很长时间才找到它,并在规范文档中进行了一些挖掘,但希望这似乎有效!

我仍然要感谢你们所有人的评论,他们在我寻找答案的过程中帮助很大。

 类似资料:
  • 我已将TS添加到我的React/Redux应用程序中。 我在我的应用程序中使用对象,如下所示: TS抛出一个错误: 类型脚本错误:类型“窗口”上不存在属性“FB”。TS2339 我想修正这个错误。 我在这里找到了答案https://stackoverflow.com/a/56402425/1114926 为什么第一个版本不起作用,而第二个版本起作用,尽管我根本没有指定FB属性?

  • 我想使用以下代码实现文件下载: RestAPI: 服务: 组件: 当我启动angular时,我得到错误:src/app/panel/service/download中的错误。服务ts(17,91):错误TS2339:类型“Observable”上不存在属性“map”。 将导入代码的正确wya是什么?当我点击下载按钮时,什么也没发生。

  • 问题内容: 在编程课上,教授正在教我们有关和的信息,其中x是整数。 他说,在这种情况下,我们可以只将or或放进去,以提高效率(虽然有点,但从理论上讲,还是效率更高)。 但是我忘了为什么 。有谁知道?这是与Java。 问题答案: 在Java中效率不是更高。在递增/递减运算符可以重载的语言中,它可能会更有效,但在其他方面,性能则完全相同。 和之间的区别在于,返回的值 是递增之前的值,返回的值是递增之后

  • 最近在一次采访中,我被问到,“Java中的动态多态性示例是什么?” 我回答:“方法覆盖”。 然后,面试官问:“是否有任何压倒一切的概念不属于动态多态性?” 这真的是个好问题吗?如果是,答案是什么? 提前感谢。

  • 问题内容: 我曾经听过一位老师丢弃它,此后一直困扰着我。假设我们要检查整数是否大于或等于0。有两种检查方法: 和 据这个老师说会快一些。在这种情况下,它是Java,但据他说,这也适用于C,c ++和其他语言。这句话有什么道理吗? 问题答案: 在现实世界中没有任何区别。 让我们看一下各种编译器为各种目标生成的代码。 我假设一个有符号的int操作(这似乎是OP的意图) 通过调查,我仅限于C和我手边的编

  • 根据这位老师的说法,会比稍微快一点。在本例中,它是Java,但据他说,这也适用于C、C++和其他语言。这种说法有道理吗?