La siguiente función obtiene una referencia a un elemento DOM y luego hace cosas:
function getElementAndDoStuff() { // element: HTMLElement | null const element = document.getElementById('id'); if(!element) throw new Error('Error.'); // element: HTMLElement element; } Después de la línea de lanzamiento, TypeScript considera que el element es un HTMLElement , sin embargo, el elemento puede desaparecer del DOM en cualquier momento, entonces, ¿es seguro confiar en TypeScript?
¿Incluso si en lugar de acceder al element justo después de la línea de lanzamiento, ponemos llamadas de función aleatorias y asyn/await en el medio?
¿Hay casos en los que no es seguro confiar en TypeScript?
Es seguro confiar en él, porque esté o no en el DOM, seguirá siendo un HTMLElement.
const element = document.querySelector('div'); console.log(element instanceof HTMLElement); element.remove(); console.log(element instanceof HTMLElement); <div>div</div>Si el elemento no está adjunto al DOM e intenta hacer algo que requiere un elemento actualmente en el DOM, recibirá una advertencia al respecto. Por ejemplo, no podrías hacer
const parent = document.querySelector('parent'); parent.appendChild(element);sin cambiarlo a algo como
const parent = document.querySelector('parent'); if(!parent) throw new Error('Error.'); parent.appendChild(element);¿Incluso si en lugar de acceder al elemento justo después de la línea de lanzamiento, ponemos llamadas de función aleatorias y asyn/await en el medio?
Sí, eso es seguro, siempre y cuando la variable nunca se reasigne ; nunca se puede mutar de un HTMLElement a otra cosa, por lo que mantenerlo escrito como tal, sin importar qué otro código se ejecute, es seguro.
¿Hay casos en los que no es seguro confiar en TypeScript?
Por lo general, hay casos extremos en cada faucet de la programación. Nada es 100% perfecto. TypeScript, al ser escrito por humanos, tiene errores . Pero dado el tiempo que se ha trabajado, se han solucionado muchas cosas, y la mayoría de las que aún existen son relativamente inusuales de encontrar en el proceso normal de escribir un guión.
En mi experiencia, los problemas de TypeScript son mucho más frecuentes en la línea de que TypeScript no puede inferir un tipo correctamente sin un poco de ayuda adicional del programador, a través de una afirmación de tipo o protección de tipo o algo así. Yendo al revés, un tipo que es A a pesar de que TypeScript infiere que es B y definitivamente no A, es mucho, mucho más inusual en una base de código decente (que, por ejemplo, no arroja any s y as s liberalmente) . He escrito una cantidad decente de TS y no puedo recordar la última vez que me encontré con ese problema, o incluso si alguna vez lo tuve. Con frecuencia hay advertencias de tipo falso positivo y muy rara vez inferencias de tipo falso negativo.