我正在玩typescript,并试图创建一个脚本,当文本输入到输入框中时,该脚本将更新p元素。
html如下所示:
<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
文件:
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的新手,所以我可能遗漏了一些明显的东西。:)
发布于 2012-10-20 23:58:39
根据Tomasz Nurkiewiczs的回答,“问题”是typescript是类型安全的。:)因此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;
即不包含类型信息。
发布于 2017-05-07 02:06:20
如果您正在使用react,则可以使用as
操作符。
let inputValue = (document.getElementById(elementId) as HTMLInputElement).value;
发布于 2018-09-25 17:50:05
我们可以assert
const inputElement: HTMLInputElement = document.getElementById('greet')
或使用as
-syntax
const inputElement = document.getElementById('greet') as HTMLInputElement
给予
const inputValue = inputElement.value // now inferred to be string
https://stackoverflow.com/questions/12989741
复制相似问题