DOM typings
we will explore and set type for DOM method; such as document.querySelector()
and document.querySelectorAll()
❌ below is not working
const radioInputList = document.querySelectorAll<RadioNodeList>('input[type=radio]');radioInputList.forEach((r) => (r.checked = r.defaultValue === 'X'));
✅ but this works
const radioInputList = document.querySelectorAll<HTMLInputElement>('input[type=radio]');radioInputList.forEach((r) => (r.checked = r.defaultValue === 'X'));
❌ but this will not work; adding typing ahead to variable
const radioInput: HTMLInputElement = document.querySelectorAll('input[type=radio]');
✅ this works ( with as
)
const radioInputList = document.querySelectorAll('input[type=radio]') as NodeListOf<HTMLInputElement>;radioInputList.forEach((r) => (r.checked = r.defaultValue === 'X'));
❌ but this will not work ( type )
const radioInputList = document.querySelectorAll<NodeListOf<HTMLInputElement>('input[type=radio]');radioInputList.forEach((r) => (r.checked = r.defaultValue === 'X'));
❌ neither this works (assign)
const radioInputList: NodeListOf<HTMLInputElement> = document.querySelectorAll('input[type=radio]');
❎ below syntax are not working
const radioInputList: HTMLInputElement = document.querySelectorAll('input[type=radio]');const radioInputList: Element = document.querySelectorAll('input[type=radio]');const radioInputList: HTMLInputElement[] = document.querySelectorAll('input[type=radio]');const radioInputList: Element[] = document.querySelectorAll('input[type=radio]');
✅ and here is separate type for both DOM method as per my approach
const video = document.querySelector<HTMLVideoElement>('video') // HTMLVideoElement | nullconst audios = document.querySelectorAll('audio') as NodeListOf<HTMLAudioElement>;
Hope it helps.