TypeScript 在 JavaScript 基础上进行了增强,最大的特点是 静态类型。你可以给变量、函数等定义类型,TypeScript 会在编译阶段检查类型错误。
1.1 安装 TypeScript
首先,你需要安装 TypeScript 编译器:
npm install -g typescript
1.2 类型声明
你可以为变量、函数、类等声明类型:
let num: number = 10;
let str: string = 'Hello, TypeScript';
let isActive: boolean = true;
1.3 函数类型
TypeScript 支持为函数指定参数和返回值的类型:
function greet(name: string): string {
return `Hello, ${name}`;
}
1.4 数组和元组
let arr: number[] = [1, 2, 3]; // 数字类型数组
let tuple: [string, number] = ['Alice', 30]; // 元组类型
1.5 对象类型
你可以指定对象的结构:
let person: { name: string, age: number } = { name: 'Alice', age: 30 };
2. 高级类型
TypeScript 提供了许多高级类型,用于描述更复杂的数据结构。
2.1 联合类型 (Union Types)
允许变量是多种类型之一:
let id: string | number;
id = 'abc';
id = 123;
2.2 交叉类型 (Intersection Types)
将多个类型合并为一个类型:
type User = { name: string };
type Employee = { id: number };
type EmployeeUser = User & Employee; // 交叉类型
let employee: EmployeeUser = { name: 'Alice', id: 123 };
2.3 类型别名 (Type Aliases)
可以为类型创建别名,简化复杂的类型声明:
type Point = { x: number, y: number };
let p: Point = { x: 10, y: 20 };
2.4 枚举 (Enums)
枚举类型是 TypeScript 提供的特殊类型,它是一个数值集合:
enum Direction {
Up = 1,
Down,
Left,
Right
}
let move: Direction = Direction.Up;
3. 接口 (Interfaces)
接口是 TypeScript 中用于定义对象结构的关键特性。它比类型别名更适合描述对象和类的形状。
interface Person {
name: string;
age: number;
}
let john: Person = { name: 'John', age: 25 };
接口可以扩展其他接口:
interface Employee extends Person {
id: number;
}
let employee: Employee = { name: 'Alice', age: 30, id: 123 };
4. 类 (Classes)
TypeScript 支持类,并且你可以在类中使用类型注解。
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
greet(): string {
return `Hello, my name is ${this.name}`;
}
}
let person = new Person('Alice', 25);
5. 泛型 (Generics)
泛型是 TypeScript 的强大特性,允许你在定义函数或类时,不预先指定具体的类型,而是在调用时传入类型。
function identity<T>(arg: T): T {
return arg;
}
let result = identity<string>('Hello');
你也可以用泛型约束类型:
function getLength<T extends { length: number }>(arg: T): number {
return arg.length;
}
6. 配置和编译
TypeScript 使用 tsconfig.json
文件来配置项目。在项目根目录中创建一个 tsconfig.json
文件来指定编译选项。
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"outDir": "./dist"
}
}
通过运行 tsc
命令来编译 TypeScript 文件:
tsc
7. TypeScript 与 JavaScript 配合使用
你可以在现有的 JavaScript 项目中逐步引入 TypeScript。你只需将文件扩展名改为 .ts
,并开始逐步添加类型。
8. TypeScript 的类型推断
TypeScript 强大的地方在于它的类型推断。即使你不显式地声明类型,TypeScript 也会根据上下文推断变量类型:
let message = 'Hello, TypeScript'; // 类型推断为 string
9. TypeScript 和 React
在 React 中使用 TypeScript 可以为组件的 props 和 state 添加类型,帮助在开发过程中捕获类型错误。
import React from 'react';
interface AppProps {
title: string;
}
const App: React.FC<AppProps> = ({ title }) => {
return <h1>{title}</h1>;
};