tipo propiedad htmlelement from files existe typescript

propiedad - typescript document.getelementbyid value



Declarar una escritura de tipo HTMLElement (3)

En la aplicación predeterminada de TypeScript HTML de Visual Studio, agregué

HTMLElement

a la primera línea del controlador de eventos window.onload, pensando que podría proporcionar un tipo para "el".

así:

class Greeter { element: HTMLElement; span: HTMLElement; timerToken: number; constructor (element: HTMLElement) { this.element = element; this.element.innerText += "The time is: "; this.span = document.createElement(''span''); this.element.appendChild(this.span); this.span.innerText = new Date().toUTCString(); } start() { this.timerToken = setInterval(() => this.span.innerText = new Date().toUTCString(), 500); } stop() { clearTimeout(this.timerToken); } } window.onload = () => { HTMLElement el = document.getElementById(''content''); var greeter = new Greeter(el); greeter.start(); };

Me sale un error

Error de compilación. Consulte la lista de errores para obtener más detalles ... / app.ts (25,17): Se esperaba '';''

¿Alguna pista de por qué? Sospecho que me falta algo obvio.


De acuerdo: sintaxis extraña!

var el: HTMLElement = document.getElementById(''content'');

arregla el problema Me pregunto por qué el ejemplo no hizo esto en primer lugar?

código completo:

class Greeter { element: HTMLElement; span: HTMLElement; timerToken: number; constructor (element: HTMLElement) { this.element = element; this.element.innerText += "The time is: "; this.span = document.createElement(''span''); this.element.appendChild(this.span); this.span.innerText = new Date().toUTCString(); } start() { this.timerToken = setInterval(() => this.span.innerText = new Date().toUTCString(), 500); } stop() { clearTimeout(this.timerToken); } } window.onload = () => { var el: HTMLElement = document.getElementById(''content''); var greeter = new Greeter(el); greeter.start(); };


El tipo aparece después del nombre en TypeScript, en parte porque los tipos son opcionales.

Así que tu línea:

HTMLElement el = document.getElementById(''content'');

Necesita cambiar a:

const el: HTMLElement = document.getElementById(''content'');

En 2013, el tipo HTMLElement se habría deducido del valor de retorno de getElementById , esto sigue siendo el caso si no está usando controles nulos estrictos (pero debería usar los modos estrictos en TypeScript). Si está aplicando controles nulos estrictos, encontrará que el tipo de devolución de getElementById ha cambiado de HTMLElement a HTMLElement | null HTMLElement | null El cambio hace que el tipo sea más correcto, porque no siempre se encuentra un elemento.

Por lo tanto, cuando use el modo de tipo, el compilador lo alentará a usar una aserción de tipo para asegurarse de encontrar un elemento. Me gusta esto:

const el: HTMLElement | null = document.getElementById(''content''); if (el) { const definitelyAnElement: HTMLElement = el; }

He incluido los tipos para demostrar lo que sucede cuando ejecuta el código. Lo interesante es que el tiene el tipo HTMLElement más HTMLElement dentro de la sentencia if , debido a que elimina la posibilidad de que sea nulo.

Puede hacer exactamente lo mismo, con los mismos tipos resultantes, sin ninguna anotación de tipo. El compilador los deducirá, lo que ahorrará toda esa escritura adicional:

const el = document.getElementById(''content''); if (el) { const definitelyAnElement = el; }


En JavaScript declara variables o funciones utilizando las palabras clave var, let o function. En las clases de TypeScript, declara miembros o métodos de clase sin estas palabras clave seguidas de dos puntos y el tipo o la interfaz de ese miembro de clase.

Es solo sintaxis de azúcar, no hay diferencia entre:

var el: HTMLElement = document.getElementById(''content'');

y:

var el = document.getElementById(''content'');

Por otro lado, debido a que especifica el tipo, obtiene toda la información de su objeto HTMLElement.