patterntypescriptCritical
The property 'value' does not exist on value of type 'HTMLElement'
Viewed 0 times
propertyexistthedoesnotvaluehtmlelementtype
Problem
I am playing around with typescript and am trying to create a script that will update a p-element as text is inputted in a input box.
The html looks as following:
And the
When I compile with
However the compiler does output a javascript file, which works just fine in chrome.
How come I get this error? And how can I fix it?
Also, where can I look up which properties are valid on a
Please note I am very new to javascript and typescript, so I might be missing something obvious. :)
The html looks as following:
And the
greeter.ts file: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);
}When I compile with
tsc I get the following "error":/home/bjarkef/sandbox/greeter.ts(8,53): The property 'value' does not exist on value of type 'HTMLElement'However the compiler does output a javascript file, which works just fine in chrome.
How come I get this error? And how can I fix it?
Also, where can I look up which properties are valid on a
'HTMLElement' according to typescript?Please note I am very new to javascript and typescript, so I might be missing something obvious. :)
Solution
Based on Tomasz Nurkiewiczs answer, the "problem" is that typescript is typesafe. :) So the
So a solution is to cast the result of
If you're in a
The resulting javascript from the line above looks like this:
i.e. containing no type information.
document.getElementById() returns the type HTMLElement which does not contain a value property. The subtype HTMLInputElement does however contain the value property.So a solution is to cast the result of
getElementById() to HTMLInputElement like this:var inputValue = (document.getElementById(elementId)).value;<> is the casting operator in typescript. See the question TypeScript: casting HTMLElement.If you're in a
.tsx file the casting syntax above will throw an error. You'll want to use this syntax instead:(document.getElementById(elementId) as HTMLInputElement).valueThe resulting javascript from the line above looks like this:
inputValue = (document.getElementById(elementId)).value;i.e. containing no type information.
Code Snippets
var inputValue = (<HTMLInputElement>document.getElementById(elementId)).value;(document.getElementById(elementId) as HTMLInputElement).valueinputValue = (document.getElementById(elementId)).value;Context
Stack Overflow Q#12989741, score: 826
Revisions (0)
No revisions yet.