Hur bygger man ett TypeScript-objekt med värden från HTML-input?


Det här borde vara mycket grundläggande men jag kan inte klara av det.

Jag har en klass som:

class MyObject {
    value: number;
    unit: string; 

    constructor(value: number, unit: string){
         this.value = value;
         this.unit = unit;
    }
}

Sedan i HTML,

    <input id="myValue" type="number"></input>
    <input id="myUnit" type="text"></input>

Jag vill skapa ett objekt av klassen "MyObject" med myValue och myUnit. Hur gör jag det?

Något som:

    var value = document.getElementById("myValue");
    var unit = document.getElementById("myUnit"); 
    myObject: MyObject = new MyObject(value, unit);

Kan inte göra det på ovanstående sätt. Vad är sättet att gå vidare med detta?

Svar #1

Här är det slutliga svaret som fungerar i TypeScript (Referens för att casta HTMLElement till HTMLInputElement: Egenskapen 'value' finns inte på ett värde av typen 'HTMLElement')

var value = parseFloat((<HTMLInputElement>document.getElementById("myValue")).value);
var unit = (<HTMLInputElement>document.getElementById("myUnit")).value; 
myObject: MyObject = new MyObject(value, unit);

Det var viktigt att kasta HTMLElement till HTMLInputElement, annars finns inte 'value'-egenskapen för HTMLElement i TypeScript och TypeScript-kompilatorn kommer att visa ett fel.

Svar #2

let value : number = parseFloat((<HTMLInputElement>document.getElementById("myValue")).value);
let unit : string = (<HTMLInputElement>document.getElementById("myUnit")).value; 

myObject: MyObject = new MyObject(value, unit);

Det kan också skrivas så här:

let value : number = parseFloat((document.getElementById("myValue") as HTMLInputElement).value);
let unit : string = (document.getElementById("myUnit") as HTMLInputElement).value; 

myObject: MyObject = new MyObject(value, unit);

Observera att jag inte har använt var utan istället let, vilket ger dig bättre kontroll över din kod.

Obs: att använda as eller direkt typcasting via <> är upp till dig. Personligen kan jag inte TypeScript tillräckligt bra för att veta den specifika skillnaden. Min gissning är att att använda 'as' gör en extra kontroll precis som i C#, men hur det hanterar fel om det inte är ett HTMLInputElement vet jag inte. (kanske någon kan kommentera det).

I TypeScript-handledningen använder de också "as": http://www.typescriptlang.org/docs/handbook/asp-net-4.html

Relaterade artiklar