属性'value'在'type为'HTMLElement'的值上不存在。
属性'value'在'type为'HTMLElement'的值上不存在。
我正在尝试使用Typescript创作一个脚本,该脚本将在输入框中输入文本时更新p元素。
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的新手,所以我可能会错过一些显而易见的东西。 :)
admin 更改状态以发布 2023年5月23日
根据Tomasz Nurkiewicz的回答,“问题”在于TypeScript是类型安全的。 🙂 因此,document.getElementById()
返回类型为HTMLElement
,它不包含value
属性。而子类型HTMLInputElement
包含value
属性。
所以一个解决方案是将getElementById()
的结果强制转换为HTMLInputElement
,像这样:
var inputValue = (document.getElementById(elementId)).value;
<>
是TypeScript中的转换操作符。请参见问题TypeScript:转换HTMLElement。
如果您在.tsx
文件中,上面的强制转换语法会报错。您应该使用以下语法:
(document.getElementById(elementId) as HTMLInputElement).value
上面的语句生成的JavaScript代码如下:
inputValue = (document.getElementById(elementId)).value;
即不包含类型信息。