Die Eigenschaft 'value' existiert nicht für den Wert des Typs 'HTMLElement'
Ich bin Herumspielen mit Typoskript und versuche ein script zu erstellen, aktualisieren Sie ein p-element wie text eingegeben wird, in ein Eingabefeld ein.
Den html sieht wie folgt aus:
<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>
Und die greeter.ts
Datei:
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);
}
Wenn ich kompilieren mit tsc
bekomme ich folgenden "Fehler":
/home/bjarkef/sandbox/greeter.ts(8,53): The property 'value' does not exist on value of type 'HTMLElement'
Jedoch der compiler keine Ausgabe einer javascript-Datei, die funktioniert gut in chrome.
Wie kommt es, ich bekomme diese Fehlermeldung? Und wie kann ich es beheben?
Auch, wo kann ich nachschlagen, welche Eigenschaften sind gültig für eine 'HTMLElement'
nach Typoskript?
Bitte beachten Sie, ich bin sehr neu, um die javascript-und typescript, so dass ich könnte etwas fehlen offensichtlich. 🙂
InformationsquelleAutor der Frage Bjarke Freund-Hansen | 2012-10-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basierend auf Tomasz Nurkiewiczs Antwort, das "problem" ist, dass typescript ist typesafe. 🙂 Also die
document.getElementById()
gibt den TypHTMLElement
die nicht enthalten einevalue
Eigenschaft. Der SubtypHTMLInputElement
jedoch dievalue
Eigenschaft.So eine Lösung ist die Besetzung das Ergebnis der
getElementById()
zuHTMLInputElement
wie diese:<>
ist die casting-operator in Typoskript. Siehe auch die Frage Typoskript: casting HTMLElement.Den resultierenden javascript aus der Zeile oben sieht wie folgt aus:
d.h. Sie enthält keine Informationen.
InformationsquelleAutor der Antwort Bjarke Freund-Hansen
Versuchen, Gießen Sie das element, das Sie aktualisieren möchten, um HTMLInputElement. Wie bereits in den anderen Antworten, die Sie brauchen, um Hinweis an den compiler, dass diese eine Besondere Art von HTMLElement:
InformationsquelleAutor der Antwort woodysan
Wenn Sie reagieren, können Sie den
as
Betreiber.InformationsquelleAutor der Antwort Michael
Das problem ist hier:
Wissen Sie, dass
HTMLElement
zurück vongetElementById()
ist tatsächlich eine InstanzHTMLInputElement
Erben, denn Sie sind die übergabe einer ID des input-Elements. Auch in statisch typisierten Java-dieser Code wird nicht kompiliert:signum()
ist eine Methode derInteger
, aber der compiler kennt nur den statischen Typ vonfoo()
, dieObject
. UndObject
nichtsignum()
Methode.Aber der compiler kann nicht wissen, dass, es kann nur die Basis auf statische Typen, die nicht das dynamische Verhalten des Codes. Und so weit wie weiß der compiler, den Typ des
document.getElementById(elementId)
Ausdruck nichtvalue
Eigenschaft. Nur input-Elemente haben Wert.Referenz-check
HTMLElement
undHTMLInputElement
in MDN. Ich denke, Maschinenschrift, mehr oder weniger im Einklang mit diesen.InformationsquelleAutor der Antwort Tomasz Nurkiewicz
Eine schnelle Lösung für dieses ist, verwenden Sie [ ] , wählen Sie das Attribut aus.
Ich versuche nur einige Methoden und finden Sie heraus, diese Lösung
Ich weiß nicht, was das problem hinter Ihrer ursprünglichen Skript.
Referenz entnehmen Sie bitte Tomasz Nurkiewicz post.
InformationsquelleAutor der Antwort
Auch für jemand mit Eigenschaften wie Requisiten oder Refs ohne Ihre "DocgetId" dann können Sie:
Wo ist die invertierte Zitate ist Ihre Requisiten-Wert, so ein Beispiel wäre etwa so:
InformationsquelleAutor der Antwort KidKode
Problem:
Lösung: in Maschinenschrift, wir müssen gegossen
document.getElementById()
was zurück gebenHTMLElement
im< HTMLScriptElement >
So können wir tun es, indem Sie folgenden Weg, um den Fehler zu beheben als erwartet typescript.js
Bei mir hat es geklappt.. hoffe es funktioniert auch für Sie.
InformationsquelleAutor der Antwort Alok Adhao