Tutorial on TypeScript Dynamic Object Manipulation

Avatar

By squashlabs, Last Updated: October 13, 2023

Tutorial on TypeScript Dynamic Object Manipulation

Dynamic Typing in TypeScript

Dynamic typing is a feature in TypeScript that allows variables to hold values of different types during runtime. Unlike statically typed languages, such as Java or C++, where variables are bound to a specific type at compile-time, dynamic typing provides more flexibility by allowing variables to change their types dynamically.

For example, let’s consider a variable in TypeScript:

let myVariable: any = 10;
console.log(myVariable); // Output: 10

myVariable = "Hello, TypeScript!";
console.log(myVariable); // Output: Hello, TypeScript!

myVariable = true;
console.log(myVariable); // Output: true

In the above example, the variable myVariable initially holds a value of type number. However, it can be reassigned to a value of type string and then to a value of type boolean. This flexibility allows developers to work with different types of data without having to explicitly declare the type of a variable.

Dynamic typing can be useful in scenarios where the type of a value may change dynamically based on user input, external data sources, or other runtime conditions. However, it also introduces the risk of potential type errors, as the compiler cannot provide type checking at compile-time.

Related Article: How to Implement and Use Generics in Typescript

Type Inference in TypeScript

Type inference is a useful feature in TypeScript that allows the compiler to automatically determine the type of a variable based on its value. This eliminates the need for developers to explicitly annotate the type of every variable, making the code more concise and readable.

Consider the following example:

let myVariable = 10;
console.log(typeof myVariable); // Output: number

myVariable = "Hello, TypeScript!";
console.log(typeof myVariable); // Output: string

myVariable = true;
console.log(typeof myVariable); // Output: boolean

In this example, the type of the variable myVariable is inferred by the TypeScript compiler based on the value assigned to it. Initially, it is inferred as a number type, then as a string type, and finally as a boolean type. The typeof operator is used to determine the type of a value at runtime.

Type inference provides the benefits of dynamic typing while still enabling static type checking. It allows developers to write cleaner code by reducing the need for explicit type annotations, while still providing type safety through compile-time checks.

Defining Properties in TypeScript Objects

In TypeScript, objects are key-value pairs where the keys are strings or symbols, and the values can be of any type. Objects can have properties that define their state and behavior.

To define properties in TypeScript objects, we can use the object literal syntax or the constructor syntax.

// Object literal syntax
const person = {
name: "John",
age: 30,
address: "123 Main St",
};

// Constructor syntax
class Person {
name: string;
age: number;
address: string;

constructor(name: string, age: number, address: string) {
this.name = name;
this.age = age;
this.address = address;
}
}

In the above example, we define a person object using the object literal syntax, which allows us to define properties directly within the braces {}. We assign values to the name, age, and address properties.

We can also define properties using the constructor syntax in classes. In the Person class, we define the name, age, and address properties within the constructor.

Defining properties in TypeScript objects allows us to store and access data related to the object’s state. These properties can be used to represent real-world entities, such as people, products, or any other data structure.

Adding Methods to TypeScript Objects

Methods are functions that are associated with objects and can be used to perform actions or calculations based on the object’s state. In TypeScript, we can add methods to objects using the object literal syntax or the class syntax.

// Object literal syntax
const calculator = {
add: function (a: number, b: number) {
return a + b;
},
subtract(a: number, b: number) {
return a - b;
},
};

// Class syntax
class Calculator {
add(a: number, b: number) {
return a + b;
}

subtract(a: number, b: number) {
return a - b;
}
}

In the above example, we define a calculator object using the object literal syntax. We add two methods, add and subtract, to perform addition and subtraction operations, respectively.

We can also define methods using the class syntax in TypeScript. In the Calculator class, we define the add and subtract methods.

Adding methods to TypeScript objects allows us to encapsulate behavior within objects and perform actions based on their state. Methods can be used to manipulate properties, interact with other objects, or perform any other computation related to the object’s purpose.

Related Article: Tutorial: Navigating the TypeScript Exit Process

Object Literals in TypeScript

Object literals are a convenient way to create and initialize objects in TypeScript. They allow us to define key-value pairs within braces {}, where the keys are strings or symbols, and the values can be of any type.

const person = {
name: "John",
age: 30,
address: "123 Main St",
};

In the above example, we define a person object using the object literal syntax. We assign values to the name, age, and address properties.

Object literals can also contain nested objects or arrays:

const employee = {
name: "John",
age: 30,
address: {
street: "123 Main St",
city: "New York",
state: "NY",
},
hobbies: ["reading", "gaming", "traveling"],
};

In this example, the employee object contains a nested address object and an array of hobbies. The nested object and array can be accessed using dot notation or square bracket notation.

Object literals provide a concise and readable way to define and initialize objects. They are widely used in TypeScript to represent data structures, configuration objects, and more.

Object Destructuring in TypeScript

Object destructuring is a feature in TypeScript that allows us to extract properties from objects and assign them to variables. It provides a concise way to access specific values within an object without having to access them using dot notation.

const person = {
name: "John",
age: 30,
address: "123 Main St",
};

const { name, age } = person;
console.log(name); // Output: John
console.log(age); // Output: 30

In the above example, we use object destructuring to extract the name and age properties from the person object and assign them to variables with the same names.

We can also provide default values for destructured properties:

const person = {
name: "John",
age: 30,
};

const { name, age, address = "Unknown" } = person;
console.log(name); // Output: John
console.log(age); // Output: 30
console.log(address); // Output: Unknown

In this example, the address property is not present in the person object. By providing a default value of "Unknown", we ensure that the address variable is assigned the default value if the property is undefined.

Object destructuring is a useful feature that allows us to extract specific properties from objects and use them directly within our code. It can help make our code more concise and readable, especially when working with complex objects.

Exploring Object Spread in TypeScript

Object spread is a feature in TypeScript that allows us to create new objects by merging the properties of existing objects. It provides a concise way to clone objects, create variations of objects, or combine objects together.

const person = {
name: "John",
age: 30,
};

const employee = {
...person,
address: "123 Main St",
};

console.log(employee);

In the above example, we use object spread to create a new employee object by merging the properties of the person object with an additional address property. The resulting object contains the name, age, and address properties.

Object spread can also be used to clone objects:

const person = {
name: "John",
age: 30,
};

const clonedPerson = { ...person };

console.log(clonedPerson);

In this example, the clonedPerson object is created by spreading the properties of the person object. The resulting object is a shallow clone of the original object.

Object spread is a convenient way to create new objects by merging properties from existing objects. It provides flexibility and readability when working with object manipulation in TypeScript.

Related Article: Tutorial: Checking Enum Value Existence in TypeScript

Object Rest in TypeScript

Object rest is a feature in TypeScript that allows us to extract the remaining properties of an object into a new object. It provides a way to separate specific properties from an object and store the rest in a separate object.

const person = {
name: "John",
age: 30,
address: "123 Main St",
};

const { name, ...rest } = person;

console.log(name); // Output: John
console.log(rest); // Output: { age: 30, address: "123 Main St" }

In the above example, we use object rest to extract the name property from the person object and store the remaining properties in the rest object. The rest object contains the properties age and address.

Object rest can also be used to separate properties when passing arguments to functions:

const person = {
name: "John",
age: 30,
address: "123 Main St",
};

function greet({ name, ...rest }: { name: string; age: number }) {
console.log(`Hello, ${name}!`);
console.log(rest);
}

greet(person);

In this example, the greet function accepts an object with properties name and age. Using object rest, we separate the name property from the person object and pass the remaining properties to the rest parameter of the function.

Object rest provides a flexible way to extract specific properties from an object and store the remaining properties in a separate object. It can be used in various scenarios to simplify object manipulation in TypeScript.

Accessing Object Keys in TypeScript

In TypeScript, we can access the keys of an object using the Object.keys() method. This method returns an array of strings representing the keys of the object.

const person = {
name: "John",
age: 30,
address: "123 Main St",
};

const keys = Object.keys(person);
console.log(keys); // Output: ["name", "age", "address"]

In the above example, we use the Object.keys() method to get an array of keys from the person object. The resulting array contains the strings "name", "age", and "address".

We can then iterate over the array of keys to perform operations on the object’s properties:

const person = {
name: "John",
age: 30,
address: "123 Main St",
};

const keys = Object.keys(person);

keys.forEach((key) => {
console.log(`${key}: ${person[key]}`);
});

In this example, we iterate over the keys array using the forEach() method. For each key, we access the corresponding value using bracket notation (person[key]) and log the key-value pair to the console.

Accessing object keys in TypeScript allows us to dynamically work with the properties of an object. This can be useful in scenarios where we need to perform operations on specific properties or iterate over the object’s properties.

Accessing Object Values in TypeScript

In TypeScript, we can access the values of an object using the Object.values() method. This method returns an array of values representing the values of the object’s properties.

const person = {
name: "John",
age: 30,
address: "123 Main St",
};

const values = Object.values(person);
console.log(values); // Output: ["John", 30, "123 Main St"]

In the above example, we use the Object.values() method to get an array of values from the person object. The resulting array contains the values "John", 30, and "123 Main St".

We can then perform operations on the array of values:

const person = {
name: "John",
age: 30,
address: "123 Main St",
};

const values = Object.values(person);

values.forEach((value) => {
console.log(value);
});

In this example, we iterate over the values array using the forEach() method and log each value to the console.

Accessing object values in TypeScript allows us to work with the values of an object’s properties. This can be useful in scenarios where we need to perform operations on specific values or iterate over the object’s values.

Related Article: Tutorial on Exact Type in TypeScript

External Sources

TypeScript Handbook – Objects
MDN Web Docs – Object Literal

Tutorial: Converting String to Bool in TypeScript

TypeScript is a powerful language that allows developers to write type-safe code for JavaScript applications. One common task in TypeScript is converting strings to... read more

How to Update Variables & Properties in TypeScript

Updating variables and properties in TypeScript can be a simple and process. This step-by-step tutorial will guide you through the correct usage of the SetValue function... read more

Tutorial on Prisma Enum with TypeScript

Prisma Enum is a powerful feature in TypeScript that allows you to define and use enumerated types in your Prisma models. This tutorial will guide you through the... read more

Tutorial: Converting a String to Boolean in TypeScript

Converting a TypeScript string into a boolean can be a tricky task. This tutorial provides different approaches, code snippets, and best practices for handling this... read more

Tutorial: Loading YAML Files in TypeScript

Loading YAML files in TypeScript is an essential skill for developers working with configuration data. This tutorial provides a comprehensive guide on how to load YAML... read more

How to Check If a String is in an Enum in TypeScript

A detailed guide on how to check if a string is part of an Enum in TypeScript. This article covers topics such as defining an Enum, checking if a string is in an Enum,... read more