2015-10-20 11 views
6

Sto verificando il tipo di input di qualche elemento, fe checkbox in TS. Ora sono sicuro di avere un elemento che è checkbox, quindi questo elemento dovrebbe avere la proprietà controllata. Ma se faccio semplicementeDattiloscritto come dire che l'elemento è checkbox, quindi element.checked non è rosso sottolineato

element: HTMLElement 
if (element.InputType.toLowerCase() == "checkbox"){ 
    element.checked = true; 
} 

di quanto funzioni, ma element.checked è sottolineato in rosso. Penso che devo semplicemente ridigitare da HTMLElement a qualcosa come CheckboxElement, ma non ho trovato nulla adatto a questa conversione. Come sbarazzarsi di questo? Ho affrontato questo anche in caso di element.value

risposta

4

Non esiste un tipo di elemento "checkbox" poiché è solo un elemento di "input" con tipo checkbox. Si potrebbe utilizzare/asserire con il tipo di HTMLInputElement che è un'estensione di HTMLElement:

var element: HTMLInputElement; 
//... You still need to do all the null checks as necessary 
//The below check may be irrelevant depending upon what you are actually doing. 
//But i am just adding here to show that you need to refer to the property "type" and 
//not "InputType" 
if (element.type.toLowerCase() == "checkbox") { 
    element.checked = true; 
} 
+1

+1 e solo per chiarezza, non ha bisogno di fare la prova di cui sopra quando si utilizza 'HTMLInputElement' ... ora si può semplicemente utilizzare il' Proprietà checked': '(if element.checked') {...' –

+0

@SunilD. Thx, OP può rimuoverlo forse è una parte del codice che imposta il valore predefinito in base al tipo di input dell'elemento e la casella di controllo sembra essere uno di questi. Giusto per chiarire la tua affermazione - 'non ha bisogno di fare il test sopra quando si usa HTMLInputElement' l'affermazione con un tipo specifico con typescript non garantisce alcuna sicurezza di runtime sebbene il controllo specifico qui possa essere irrilevante e hai ragione. – PSL

+0

Grazie per l'aiuto. Un'altra cosa. Supponiamo che io abbia ascoltatore sull'evento di cambiamento, ora vorrei controllare il tipo di input ' event.target) .type) ==" password "' ora sicuro che questo può essere cambiato in ' event.target) .type) == "password" 'ma il problema è che l'evento change può essere attivato sull'elemento , che non so esattamente quale sia, ma presumo che non abbia la proprietà' type'. C'è un modo sicuro di usare casting in TS? Solo le cose che mi vengono in mente sono che prima di questo controllerò che il tag sia stato inserito. @Sunil D. –

4

L'affermazione if non è necessario come altri hanno già detto. Tuttavia, ci sono diversi modi come fare compilatore felice:

// 1st (best variant in my opinion) 
let e1: HTMLInputElement; // type of variable 
e1.checked = true; 

// 2nd (sometimes a good option too)  
let e2 = document.getElementById('myInput'); 
(<HTMLInputElement>e2).checked = true; // "hint" the type to TypeScript 

// 3rd (a hack that may come handy sometimes) 
let e3 = document.getElementById('myInput'); 
e2['checked'] = true; 
+0

'cast esplicito' -> Typescript non ha cast di alcun tipo come in altri linguaggi, è di tipo assertion imho, anche in base al codice in fase di esecuzione se non riesce a trovare l'elemento la riga successiva lancia il tipo di errore assertion non salverà – PSL

+0

Hai ragione. È solo un "suggerimento" che rende il compilatore TypeScript felice. Sto lottando per trovare qualcosa a riguardo nelle specifiche. –

Problemi correlati