首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >'HTMLElement‘类型的值上不存在属性' value’

'HTMLElement‘类型的值上不存在属性' value’
EN

Stack Overflow用户
提问于 2012-10-20 23:07:46
回答 15查看 334.6K关注 0票数 333

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

html如下所示:

代码语言:javascript
运行
复制
<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>

greeter.ts文件:

代码语言:javascript
运行
复制
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);
}

当我用tsc编译时,我得到了下面的“错误”:

/home/bjarkef/sandbox/greeter.ts(8,53): The property 'value' does not exist on value of type 'HTMLElement'

然而,编译器会输出一个javascript文件,这在chrome中工作得很好。

我是怎么得到这个错误的?我该如何修复它呢?

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

请注意,我是javascript和typescript的新手,所以我可能遗漏了一些明显的东西。:)

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2012-10-20 23:58:39

根据Tomasz Nurkiewiczs的回答,“问题”是typescript是类型安全的。:)因此document.getElementById()返回类型HTMLElement,该类型不包含value属性。但是,子类型HTMLInputElement包含value属性。

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

代码语言:javascript
运行
复制
var inputValue = (<HTMLInputElement>document.getElementById(elementId)).value;

<>是typescript中的转换操作符。请参阅问题TypeScript: casting HTMLElement

从上面的代码行得到的javascript如下所示:

代码语言:javascript
运行
复制
inputValue = (document.getElementById(elementId)).value;

即不包含类型信息。

票数 568
EN

Stack Overflow用户

发布于 2017-05-07 02:06:20

如果您正在使用react,则可以使用as操作符。

代码语言:javascript
运行
复制
let inputValue = (document.getElementById(elementId) as HTMLInputElement).value;
票数 113
EN

Stack Overflow用户

发布于 2018-09-25 17:50:05

我们可以assert

代码语言:javascript
运行
复制
const inputElement: HTMLInputElement = document.getElementById('greet')

或使用as-syntax

代码语言:javascript
运行
复制
const inputElement = document.getElementById('greet') as HTMLInputElement

给予

代码语言:javascript
运行
复制
const inputValue = inputElement.value // now inferred to be string
票数 45
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12989741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档