[SOLVED] The property 'value' does not exist on value of type 'HTMLElement'


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:

        <p id="greet"></p>
            <input id="name" type="text" name="name" value="" onkeyup="greet('name')" />
    <script src="greeter.js"></script>

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. 🙂


Based on Tomasz Nurkiewiczs answer, the "problem" is that typescript is typesafe. 🙂 So the 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 = (<HTMLInputElement>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).value

The resulting javascript from the line above looks like this:

inputValue = (document.getElementById(elementId)).value;

i.e. containing no type information.

Answered By – Bjarke Freund-Hansen

Answer Checked By – Candace Johnson (BugsFixing Volunteer)

Leave a Reply

Your email address will not be published. Required fields are marked *