Typescript 索引签名

Typescript 索引签名

编程语言TypeScript是基于JavaScript的,是强类型的、面向对象的和编译的。该语言通过静态类型、类和接口等工具进行了改进,有助于早期错误检测,使JavaScript更易于管理。TypeScript的一个特点是能够强制对象的索引成员的类型,这个过程也被称为索引签名。

索引签名是一组键值对,描述了一个对象可能具有的许多属性。属性名的类型和属性值的类型分别用值和键来指定。为了强制执行一个对象的属性种类,用户可以利用TypeScript的索引签名功能。

索引签名可以有效地强制执行某些对象属性,但也会使代码在理解和维护方面具有挑战性。因此,只有在必要时,才有必要使用索引签名。

语法

let objectName: {
   [key: string]: string
}

在上面的语法中,’objectName’是我们的对象的名称,我们把键的类型执行为一个字符串,把值执行为一个字符串。

示例1

在这个例子中,我们有两个接口,Person和PhoneBook。Person接口定义了一个有两个属性的人物对象的结构:姓名(字符串)和年龄(数字)。PhoneBook接口定义了一个索引签名,将字符串类型作为键,将Person接口作为值。这意味着任何实现PhoneBook接口的对象只能有键为字符串类型、值为Person类型的属性。

然后我们定义一个类型为PhoneBook的变量phoneBook,并指定一个空对象。然后我们在电话簿中添加一些条目,这些条目应该以名字为键,以Person对象为值。最后,我们在控制台记录这些值,以验证我们是否试图把任何其他类型的变量代替上述类型,然后编译器会给出一个错误。

// 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)

On 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);

输出

上述代码将产生以下输出 –

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

示例2

在这个例子中,我们有一个接口Product,它定义了一个有两个属性的产品对象的结构:名称(字符串)和价格(数字)。然后我们有另一个接口ShoppingCart,它表示一个索引签名,用数字类型作为键,用产品接口作为值。任何实现ShoppingCart接口的对象只能有键为数字类型、值为产品类型的属性。

然后我们定义一个ShoppingCart类型的变量cart,并给它分配一个空对象。然后我们向购物车添加一些条目,这些条目应该以产品ID为键,产品对象为值。我们可以看到,这些条目被正确地添加到购物车中,如果值不是产品类型,或者产品对象缺少产品接口中定义的任何属性,购物车会出现错误。

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])

On compiling, 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]);

输出

上述代码将产生以下输出 –

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

这些例子说明了如何使用索引签名来强制执行一个对象的属性类型。索引签名是一个强大的功能,可以帮助你写出更健壮和可维护的代码,但重要的是要明智地使用它们,并且只在必要时使用。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

TypeScript 教程