TypeScript数据类型解析
前言
TypeScript 是一种静态类型的超集语言,扩展了 JavaScript 的功能。它提供了丰富的数据类型,包括基本数据类型和复杂数据类型。下面是对这些类型的详细解析和一些经典例子。
基本数据类型
- 布尔类型(Boolean)
- 表示逻辑值,只能是true
或false
。
- 示例:let isDone: boolean = false;
- 数字类型(Number)
- 用于表示数值,可以是整数或浮点数。
- TypeScript支持十进制、二进制、八进制和十六进制字面量。
- 示例:let count: number = 10; let price: number = 3.99;
- 字符串类型(String)
- 用于表示文本数据。
- 可以使用双引号(””)或单引号(’’)表示字符串。
- 示例:let message: string = "Hello, TypeScript!";
- 空值(Null 和 Undefined)
- null
表示没有任何对象值。
- undefined
表示一个变量被声明了,但没有被赋值。
- 示例:let value1: null = null; let value2: undefined = undefined;
- 枚举类型(Enum)
- 是对JavaScript标准数据类型的一个补充,用于定义一组命名的常量。
- 示例:enum Color { Red, Green, Blue } let myColor: Color = Color.Green;
- 任意类型(Any)
- 当在编程阶段不确定变量的类型时,可以使用any
类型。
- 示例:let notSure: any = 4; notSure = "maybe a string"; notSure = false;
- 空类型(Void)
- 表示没有任何类型,一般用于说明函数的返回值不能是undefined
和null
之外的值。
- 示例:function logMessage(): void { console.log("This is a log message."); }
- never
- 表示位置类型,通常用于错误位置或总是抛出异常的函数。
- 例子:`function throwError(message: string): never {
throw new Error(message);
}`
复杂数据类型
- 数组 - 表示元素集合,可以是固定类型或多种类型。
- 同类型数组:let list: number[] = [1, 2, 3];
- 泛型数组:let list: Array<number> = [1, 2, 3];
- 元组 - 已知元素数量和类型的数组。
- 例子:let x: [string, number] = ["hello", 10];
- 枚举 - 一组命名的常数。
- 例子:enum Color {Red, Green, Blue} let c: Color = Color.Green;
- 对象 - 表示无序的键值对集合。
- 例子:`let person = {
name: “Alice”,
age: 21
};`
- 类 - 用于创建对象的模板。
- 例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
let greeter = new Greeter("world");
- 接口 - 定义了对象的结构,但不实现它。
- 例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
interface Name {
name: string;
age: number;
}
function greeter(person: Name) {
console.log("Hello, " + person.name + "! You are " + person.age + " years old.");
}
- 函数 - 表示一段可重用的代码。
- 例子:
1
2
3
4
5
6
7
function add(x: number, y: number): number {
return x + y;
}
- 泛型 - 允许在创建类、接口或函数时使类型成为参数。
- 例子:
1
2
3
4
5
6
7
8
9
function identity<T>(arg: T): T {
return arg;
}
let output = identity<string>("myString");
- 联合类型 - 表示一个值可以是几种类型之一。
- 例子:let value: string | number = "hello"; // 也可以是 value = 42;
- 类型别名 - 为类型创建一个新的名称。
- 例子:type Name = string; let userName: Name = "TypeScript";
- 字面量类型 - 表示原始值的精确类型。
- 例子:let size: 'small' | 'medium' | 'large' = 'medium';
- 索引访问签名 - 允许你访问对象的属性,这些属性的键是字符串或数字。
- 例子:
1
2
3
4
5
6
7
8
9
10
11
interface StringArray {
[index: number]: string;
}
let myArray: StringArray;
myArray = ["Bob", "Fred"];
- 映射类型 - 创建一个新类型,其属性是从现有类型派生的。
- 例子:
1
2
3
4
5
6
7
type OptionsFlags = {
[K in keyof typeof MY_OPTIONS]: boolean;
};
1 |
|
总结
TypeScript通过丰富的数据类型系统,为JavaScript开发提供了更强的类型安全和代码可读性。基本数据类型和复杂数据类型各有其应用场景,开发者可以根据实际需要选择使用。通过上述经典例子的展示,希望能帮助读者更好地理解TypeScript的数据类型系统。