我正在玩打字稿,并试图创建一个脚本,该脚本将在输入框中输入文本时更新 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 中运行良好。
我怎么会收到这个错误?我该如何解决?
另外,根据打字稿,我在哪里可以查看 'HTMLElement'
上哪些属性有效?
请注意,我对 javascript 和 typescript 非常陌生,所以我可能会遗漏一些明显的东西。 :)
原文由 Bjarke Freund-Hansen 发布,翻译遵循 CC BY-SA 4.0 许可协议
根据 Tomasz Nurkiewiczs 的回答,“问题”是打字稿是类型安全的。 :) 所以
document.getElementById()
返回类型HTMLElement
不包含value
属性。然而,子类型HTMLInputElement
确实包含value
属性。因此,解决方案是将
getElementById()
的结果转换为HTMLInputElement
如下所示:<>
是打字稿中的铸造运算符。请参阅问题 TypeScript:casting HTMLElement 。如果您在
.tsx
文件中,上面的转换语法将引发错误。您将希望改用此语法:上面一行生成的 javascript 如下所示:
即不包含类型信息。