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

“HtmlElement”类型的值上不存在属性“value”

南门烈
2023-03-14

我正在使用typescript,并试图创建一个脚本,当文本输入到输入框中时,该脚本将更新p元素

<html>
    <head>
    </head>
    <body>
        <p id="greet"></p>
        <form>
            <input id="name" type="text" name="name" value="" onkeyup="greet('name')" />
        </form>
    </body>
    <script src="greeter.js"></script>
</html>
function greeter(person)
{
    return "Hello, " + person;
}

function greet(elementId)
{
    var inputValue = document.getElementById(elementId).value;

    if (inputValue.trim() == "")
        inputValue = "World";

    document.getElementById("greet").innerText = greeter(inputValue);
}

然而,编译器确实输出了一个javascript文件,这在Chrome中工作得很好。

我怎么会有这个错误?那我该怎么修呢?

另外,根据TypeScript,在哪里可以查找'HTMLElement'上哪些属性是有效的?

请注意,我对javascript和typescript非常陌生,所以我可能会遗漏一些显而易见的东西。:)

共有1个答案

扈德容
2023-03-14

根据Tomasz Nurkiewicz的回答,“问题”在于typescript是TypeSafe。:)因此Document.GetElementById()返回类型HTMLElement,该类型不包含Value属性。但是,子类型HTMLinPutElement包含Value属性。

因此,一个解决方案是将GetElementById()的结果强制转换为HTMLinPutElement,如下所示:

var inputValue = (<HTMLInputElement>document.getElementById(elementId)).value;

<>是TypeScript中的强制转换运算符。请参阅问题typescript:casting htmlelement。

上面一行生成的javascript如下所示:

inputValue = (document.getElementById(elementId)).value;

即不包含类型信息。

 类似资料: