1. 基本类型
1.1 数字类型 (number
)
在 TypeScript 中,number
类型代表数字值,支持整数和浮点数。
let age: number = 25;
let price: number = 99.99;
1.2 字符串类型 (string
)
string
类型用于表示文本数据,所有的字符串必须用单引号 ('
) 或双引号 ("
) 括起来。
let name: string = "白白的白豆腐";
let message: string = `你好, ${name}!`;
1.3 布尔类型 (boolean
)
boolean
类型用于表示逻辑值,只有两个可能的值:true
或 false
。
let isActive: boolean = true;
let isCompleted: boolean = false;
1.4 数组类型 (array
)
数组是存储多个值的容器,可以定义数组的类型。
let numbers: number[] = [1, 2, 3];
let names: string[] = ["Tom", "Jerry"];
2. 函数类型
2.1 基本函数定义
TypeScript 中函数的类型定义可以通过 function
关键字来指定参数类型和返回值类型。
function greet(name: string): string {
return `Hello, ${name}`;
}
2.2 可选参数
在函数定义中,某些参数是可选的,可以通过在参数名后加上 ?
来表示。
function greet(name: string, age?: number): string {
if (age) {
return `Hello, ${name}. You are ${age} years old.`;
}
return `Hello, ${name}`;
}
2.3 默认参数值
可以为函数参数设置默认值,当没有传入参数时使用默认值。
function greet(name: string, age: number = 18): string {
return `Hello, ${name}. You are ${age} years old.`;
}
3. 对象类型
3.1 对象类型定义
对象类型的定义可以通过接口(interface
)或者类型别名(type
)来表示。
interface Person {
name: string;
age: number;
}
let person: Person = { name: "Tom", age: 30 };
3.2 可选属性
接口中的某些属性可以是可选的,通过在属性名后添加 ?
来表示。
interface Person {
name: string;
age?: number;
}
let person: Person = { name: "Tom" }; // age 是可选的
3.3 任意属性
如果对象的属性是动态的,或者不确定的,可以使用 index signature
来表示。
interface Dictionary {
[key: string]: string;
}
let dict: Dictionary = { name: "Tom", city: "Shanghai" };
4. 类型推断与类型注解
4.1 类型推断
TypeScript 会根据变量的赋值自动推断出类型。例如,当你给变量赋值时,TypeScript 会根据值的类型推断出该变量的类型。
let age = 25; // TypeScript 自动推断 age 的类型为 number
4.2 类型注解
类型注解是显式地指定变量的类型。即使 TypeScript 能自动推断类型,仍然可以使用类型注解来显式指定变量的类型。
let age: number = 25;
5. 联合类型与交叉类型
5.1 联合类型(Union Type
)
联合类型允许一个变量可以是多种类型中的一种,用竖线 (|
) 来分隔。
let value: string | number;
value = "hello";
value = 123;
5.2 交叉类型(Intersection Type
)
交叉类型表示一个变量可以同时具有多个类型,使用 &
连接多个类型。
interface A {
name: string;
}
interface B {
age: number;
}
let person: A & B = { name: "Tom", age: 30 };
6. 类与对象
6.1 类定义
TypeScript 中的类和 JavaScript 类类似,可以通过 class
关键字来定义。
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
greet(): string {
return `Hello, ${this.name}`;
}
}
let person = new Person("Tom", 30);
console.log(person.greet());
6.2 继承与多态
TypeScript 支持类的继承,可以使用 extends
关键字来继承父类。
class Employee extends Person {
job: string;
constructor(name: string, age: number, job: string) {
super(name, age);
this.job = job;
}
greet(): string {
return `Hello, ${this.name}. Your job is ${this.job}.`;
}
}
let employee = new Employee("Tom", 30, "Engineer");
console.log(employee.greet());
7. 泛型(Generics)
7.1 泛型函数
泛型使得函数可以接受多种类型的参数,并保持类型一致性。
function identity<T>(arg: T): T {
return arg;
}
let result = identity("Hello"); // result 的类型为 string
7.2 泛型约束
泛型可以添加约束,确保传入的类型满足一定条件。
function getLength<T extends { length: number }>(arg: T): number {
return arg.length;
}
console.log(getLength("Hello")); // 输出 5
8. 高级类型
8.1 映射类型(Mapped Types)
映射类型可以根据已有类型创建新类型,通过修改类型的属性来实现。
type ReadOnly<T> = {
readonly [P in keyof T]: T[P];
};
interface Person {
name: string;
age: number;
}
const person: ReadOnly<Person> = { name: "Tom", age: 30 };
// person.name = "Jerry"; // 错误,属性为只读
8.2 条件类型(Conditional Types)
条件类型允许根据类型的不同选择不同的类型。
type IsString<T> = T extends string ? "yes" : "no";
type Test1 = IsString<string>; // "yes"
type Test2 = IsString<number>; // "no"
文章评论