Table of Contents
grammar
Example 2
Output
Home Web Front-end JS Tutorial How to enforce type for indexed members of Typescript objects

How to enforce type for indexed members of Typescript objects

Aug 23, 2023 pm 02:25 PM

How to enforce type for indexed members of Typescript objects

The programming language TypeScript is based on JavaScript, which is strongly typed, object-oriented and compiled. The language is improved with tools like static typing, classes, and interfaces, which aid in early error detection and make JavaScript more manageable. A feature of TypeScript is the ability to enforce the types of indexed members of an object, and this process is also known as index signing.

An index signature is a set of key-value pairs that describe the many properties an object may have. Specify the type of the property name and the type of the property value using values ​​and keys respectively. To enforce the kind of an object's properties, users can take advantage of TypeScript's index signing feature.

Index signatures can effectively enforce certain object properties, but can also make code difficult to understand and maintain. Therefore, it is very important to only use index signatures when necessary.

grammar

let objectName: {
   [key: string]: string
}
Copy after login

In the above syntax, 'objectName' is the name of our object, and we force the key to be of type string and the value to be string.

Example 1

In this example, we have two interfaces, Person and PhoneBook. The Person interface defines the structure of a person object, including two attributes: name (string) and age (number). The PhoneBook interface defines an index signature, using the string type as the key and the Person interface as the value. This means that any object that implements the PhoneBook interface can only have properties whose key type is String and whose value type is Person.

Then we defined a variable phoneBook, of type PhoneBook, and assigned an empty object. Then we add some entries to the phonebook where the keys should be names and the values ​​should be Person objects. Finally, we verify through the console log that if we try to put any other type of variable besides the above type, the compiler will report an error.

// Person interface
interface Person {
   name: string
   age: number
}

// PhoneBook interface
interface PhoneBook {
   [key: string]: Person
}

let phoneBook: PhoneBook = {}

phoneBook['Person 1'] = { name: 'ABC', age: 30 }
phoneBook['Person 2'] = { name: 'XYZ', age: 25 }
phoneBook['Person 3'] = { name: 'MNO', age: 10 }

console.log(phoneBook)

Copy after login

When compiling, it will generate the following JavaScript code −

var phoneBook = {};
phoneBook['Person 1'] = { name: 'ABC', age: 30 };
phoneBook['Person 2'] = { name: 'XYZ', age: 25 };
phoneBook['Person 3'] = { name: 'MNO', age: 10 };
console.log(phoneBook);
Copy after login

Output

The above code will produce the following output -

{ 'Person 1': { name: 'ABC', age: 30 },
  'Person 2': { name: 'XYZ', age: 25 },
  'Person 3': { name: 'MNO', age: 10 } }
Copy after login

Example 2

In this example, we have an interface Product, which defines the structure of a product object with two properties: name (string) and price (number). Then we have another interface ShoppingCart which represents an index signature using a numeric type as the key and the Product interface as the value. Any object that implements the ShoppingCart interface can only have properties with a key type of Number and a value type of Product.

Then we define a variable cart of type ShoppingCart and assign an empty object to it. Then we add some entries to the shopping cart where the key should be the product id and the value should be the product object. We can see that the items are added to the cart correctly, if the value is not of type Product or the product object is missing any of the properties defined in the Product interface, an error will occur.

interface Product {
   name: string
   price: number
}

// ShoppingCart interface
interface ShoppingCart {
   [key: number]: Product
}

let cart: ShoppingCart = {}

cart[1] = { name: 'Shirt', price: 20 }
cart[2] = { name: 'Pants', price: 30 }
cart[3] = { name: 'Shoes', price: 40 }

console.log(cart[1])
console.log(cart[2])
console.log(cart[3])
Copy after login

When compiled, it will generate the following JavaScript code −

var cart = {};
cart[1] = { name: 'Shirt', price: 20 };
cart[2] = { name: 'Pants', price: 30 };
cart[3] = { name: 'Shoes', price: 40 };
console.log(cart[1]);
console.log(cart[2]);
console.log(cart[3]);
Copy after login

Output

The above code will produce the following output -

{ name: 'Shirt', price: 20 }
{ name: 'Pants', price: 30 }
{ name: 'Shoes', price: 40 }
Copy after login

These examples illustrate how to use index signatures to enforce an object's property types. Index signatures are a powerful feature that can help you write more robust and maintainable code, but it's important to use them wisely and only when necessary.

The above is the detailed content of How to enforce type for indexed members of Typescript objects. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What should I do if I encounter garbled code printing for front-end thermal paper receipts? What should I do if I encounter garbled code printing for front-end thermal paper receipts? Apr 04, 2025 pm 02:42 PM

Frequently Asked Questions and Solutions for Front-end Thermal Paper Ticket Printing In Front-end Development, Ticket Printing is a common requirement. However, many developers are implementing...

Demystifying JavaScript: What It Does and Why It Matters Demystifying JavaScript: What It Does and Why It Matters Apr 09, 2025 am 12:07 AM

JavaScript is the cornerstone of modern web development, and its main functions include event-driven programming, dynamic content generation and asynchronous programming. 1) Event-driven programming allows web pages to change dynamically according to user operations. 2) Dynamic content generation allows page content to be adjusted according to conditions. 3) Asynchronous programming ensures that the user interface is not blocked. JavaScript is widely used in web interaction, single-page application and server-side development, greatly improving the flexibility of user experience and cross-platform development.

Who gets paid more Python or JavaScript? Who gets paid more Python or JavaScript? Apr 04, 2025 am 12:09 AM

There is no absolute salary for Python and JavaScript developers, depending on skills and industry needs. 1. Python may be paid more in data science and machine learning. 2. JavaScript has great demand in front-end and full-stack development, and its salary is also considerable. 3. Influencing factors include experience, geographical location, company size and specific skills.

How to merge array elements with the same ID into one object using JavaScript? How to merge array elements with the same ID into one object using JavaScript? Apr 04, 2025 pm 05:09 PM

How to merge array elements with the same ID into one object in JavaScript? When processing data, we often encounter the need to have the same ID...

Is JavaScript hard to learn? Is JavaScript hard to learn? Apr 03, 2025 am 12:20 AM

Learning JavaScript is not difficult, but it is challenging. 1) Understand basic concepts such as variables, data types, functions, etc. 2) Master asynchronous programming and implement it through event loops. 3) Use DOM operations and Promise to handle asynchronous requests. 4) Avoid common mistakes and use debugging techniques. 5) Optimize performance and follow best practices.

How to achieve parallax scrolling and element animation effects, like Shiseido's official website?
or:
How can we achieve the animation effect accompanied by page scrolling like Shiseido's official website? How to achieve parallax scrolling and element animation effects, like Shiseido's official website? or: How can we achieve the animation effect accompanied by page scrolling like Shiseido's official website? Apr 04, 2025 pm 05:36 PM

Discussion on the realization of parallax scrolling and element animation effects in this article will explore how to achieve similar to Shiseido official website (https://www.shiseido.co.jp/sb/wonderland/)...

The Evolution of JavaScript: Current Trends and Future Prospects The Evolution of JavaScript: Current Trends and Future Prospects Apr 10, 2025 am 09:33 AM

The latest trends in JavaScript include the rise of TypeScript, the popularity of modern frameworks and libraries, and the application of WebAssembly. Future prospects cover more powerful type systems, the development of server-side JavaScript, the expansion of artificial intelligence and machine learning, and the potential of IoT and edge computing.

The difference in console.log output result: Why are the two calls different? The difference in console.log output result: Why are the two calls different? Apr 04, 2025 pm 05:12 PM

In-depth discussion of the root causes of the difference in console.log output. This article will analyze the differences in the output results of console.log function in a piece of code and explain the reasons behind it. �...

See all articles