数组类型
数组是十分常用的数据结构,它表示一组有序元素的集合。在 TypeScript中,数组值的数据类型为数组类型。
一、数组类型定义
TypeScript 提供了以下两种方式来定义数组类型:
- 简单数组类型表示法
- 泛型数组类型表示法
1.1、简单数组类型表示法
在TypeScript中,你可以使用数组类型表示法来定义一个数组的类型。这是一个基础的方法,直接定义数组元素的类型。
例如,如果我们想要定义一个只包含字符串类型元素的数组,我们可以这样做:
let strArray: string[] = ["Hello", "World"];
在这个例子中,string[]
是一个数组类型,它包含的元素都是string
类型。
1.2、泛型数组类型表示法
TypeScript也支持泛型数组类型的表示法。这种类型的数组可以接受的元素类型更为广泛。在泛型数组类型中,我们需要提供一个类型参数,这个参数将作为数组元素的类型。
例如,如果我们想要定义一个可以接受任何类型的元素的数组,我们可以使用any
类型参数:
let anyArray: Array<any> = [1, "Hello", true, null, undefined];
在这个例子中,Array<any>
是一个泛型数组类型,它可以接受任何类型的元素。
除此之外,我们也可以使用其他类型作为类型参数,例如对象类型、接口类型等。例如,我们可以定义一个对象数组,这个对象具有特定的属性:
interface Person { name: string; age: number; } let people: Person[] = [ { name: "Alice", age: 20 }, { name: "Bob", age: 30 }, ];
在这个例子中,Person[]
是一个对象数组类型,它包含的元素都是Person
类型的对象。每个Person
类型的对象都有name
和age
两个属性,类型分别为string
和number
。
1.3、简单数组类型和泛型数组类型的区别是什么
简单数组类型和泛型数组类型的主要区别在于它们能够容纳的元素类型的范围。
简单数组类型,如int[],它只能容纳一种特定类型的元素,即整数。如果你尝试添加其他类型的元素(如字符串或布尔值),那么在编译时将会出错。
泛型数组类型,如Array<T>,则更为灵活。这里的 T可以是任何类型,包括简单类型(如string或number)和复杂类型(如Person或Object)。这意味着你可以将任何类型的元素添加到泛型数组中,只要这些元素符合你为T指定的类型。
因此,你可以根据需要选择使用哪种数组类型。如果数组元素的类型是固定的,那么简单数组类型可能是更好的选择。如果需要存储多种类型的元素,或者元素类型可能是变化的,那么泛型数组类型就更为合适了。
二、只读数组
只读数组与常规数组的区别在于,只读数组仅允许程序读取数组元素而不允许修改数组元素。
TypeScript 提供了以下三种方式来定义一个只读数组
1、ReadonlyArray<T>
:这是TypeScript的一个内置类型,用于表示只读数组。T
是数组中元素的类型。例如:
let readonlyArray: ReadonlyArray<string> = ['Alice', 'Bob'];
在上面的代码中,readonlyArray
是一个只读字符串数组。如果你尝试修改这个数组(例如,尝试添加或删除元素),TypeScript 编译器会抛出错误。
2、readonly
修饰符:从 TypeScript 3.7 开始,你可以使用readonly
修饰符来定义只读数组:
let readonlyArray: ReadonlyArray<string> = readonly ['Alice', 'Bob'];
这种方式与使用ReadonlyArray<T>
的效果是相同的,但语法更简洁。
Readonly<T>
:这是 TypeScript的一个工具类型,用于将任何类型转换为只读类型。例如:
let array: string[] = ['Alice', 'Bob']; let readonlyArray: ReadonlyArray<string> = Readonly(array);
在这个例子中,Readonly(array)
将array
转换为一个只读数组。同样地,如果你尝试修改readonlyArray
,TypeScript编译器会抛出错误。
需要注意的是,只读数组并不意味着你不能对其进行迭代或使用一些数组方法(例如map
、filter
等)。它只是限制了你不能改变数组的结构(例如添加或删除元素)。
标签:TypeScript,入门,只读,元素,泛型,数组,类型 From: https://www.cnblogs.com/zuoyang/p/17745694.html