Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

Use ordinary JavaScript object destructuring to bind DOM properties to local variables: const { id, title } = element;. TypeScript infers each variable from the element’s type. The important safety step is to check that a DOM lookup returned an element before destructuring it, because lookups such as document.getElementById() can return null.

What DOM destructuring does

Destructuring reads named properties from an object and creates local bindings. For a DOM element, const { id, title } = element; is equivalent in effect to reading element.id and element.title into separate variables. It does not clone the element or deep-copy its nested values; it simply binds the values read from those properties.

TypeScript uses the static type of element to determine which properties are available and the types of the resulting variables. The browser DOM declarations are available in typical browser-oriented TypeScript projects.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Check a DOM lookup before destructuring

document.getElementById('profile') has the type HTMLElement | null. An ID might not match an element, so narrow away null before reading or destructuring properties:

const element = document.getElementById('profile');

if (element) {
  const { id, title } = element;
  console.log(id, title);
}

Destructuring a null or undefined value throws at runtime. A non-null assertion such as ! only suppresses TypeScript’s warning; use one only when the surrounding program genuinely guarantees the element exists. The TypeScript documentation describes the nullable return type in its DOM Manipulation guide.

Choose an element type that exposes the properties you need

A generic HTMLElement provides common HTML-element properties, but not every property of every specialized element. If you need an input’s value or disabled state, select an input so TypeScript can infer its more specific element interface:

Rank #2
TypeScript Programming Language - Software Engineer & Coder T-Shirt
  • TypeScript implements a superset of syntax for strictly typed development, facilitating deep static analysis and enhanced development environment integration. The compiler translates source into standard script formats, ensuring parity across any runtime.
  • TypeScript is ideal for front-end developers, full-stack engineers, and software architects who build large-scale web applications. It serves those looking to improve code excellence, reduce bugs through static checking, and maintain complex projects more.
  • Lightweight, Classic fit, Double-needle sleeve and bottom hem
const input = document.querySelector('input');

if (input) {
  const { value, disabled } = input;
  console.log(value, disabled);
}

The guard is still needed because querySelector() can also return null. For a known tag, the selector provides a more precise type than an ID lookup’s general HTMLElement. If the element’s type is not already specific enough, narrow it based on a reliable check or use an API that returns the appropriate element type; an unchecked cast can hide a real mismatch.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Rename bindings and provide property defaults

Use propertyName: localName when the local variable needs a clearer name or would conflict with another binding. The name before the colon is the property on the element; the name after it is the new local variable:

const { id: elementId } = element;

A default in a destructuring pattern applies when the property value is undefined:

const { title = 'Untitled' } = element;

That default does not replace an explicit null. If a property’s type can include null, handle that case explicitly. A property default also does not make destructuring a missing source object safe: first check that the element itself exists.

Annotate the complete pattern in TypeScript

When annotating a destructured parameter, put the type after the entire pattern, not inside its braces. A named type is often easier to maintain than a long inline type:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
type ElementDetails = {
  id: string;
  title: string;
};

function handle({ id, title }: ElementDetails) {
  console.log(id, title);
}

The same placement applies to an inline object type: function handle({ id }: { id: string }) {}. TypeScript’s More on Functions handbook explains that the object type annotation follows the destructuring syntax; its Object Types handbook covers object type declarations.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Assign into variables that already exist

If you are assigning destructured values to variables declared earlier, wrap the object pattern in parentheses. Without them, a leading brace can be interpreted as a block:

let elementId: string;

({ id: elementId } = element);

For declarations, the usual form needs no extra parentheses: const { id } = element;. The TypeScript documentation covers destructuring declarations and assignments in Variable Declaration.

Keep DOM destructuring readable

Destructuring is most useful when it makes nearby code clearer. Keep the element reference if you still need to call methods or inspect other properties, and avoid combining deep nesting, several renames, and multiple defaults in one dense expression. For DOM code, a straightforward pattern is to keep the lookup, null check, and property binding visible:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
const link = document.querySelector('a');

if (link) {
  const { href, title } = link;
  link.focus();
  console.log(href, title);
}

DOM property names come from the element’s TypeScript interface and do not always mirror HTML attribute spelling one-for-one. Check the interface for the element you are using rather than assuming an attribute name is also a property with identical spelling. The W3C DOM Level 2 specification is historical material, not a current compatibility reference.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.