TypeScript 快速上手指南

简介: TypeScript是JavaScript的超集,支持静态类型,提升代码质量与可维护性。本文涵盖环境搭建、核心语法、实战示例及工程化配置,零基础也能快速上手,适合Vue3、React等大型项目开发。

TypeScript 快速上手指南(可直接复制粘贴到博客)
TypeScript 是微软开发的 JavaScript 超集,在 JS 基础上增加静态类型系统,能提前发现代码错误、提升代码可维护性,是大型前端项目的标配(Vue3、React 均推荐使用)。以下内容涵盖 TypeScript 核心语法、实战示例和工程化配置,可直接复制到博客,零基础也能快速上手。
一、快速上手:环境搭建(两种方式)
方式 1:在线体验(无需本地配置)
直接打开 TypeScript Playground,在线编写、编译 TS 代码,适合快速学习。
方式 2:本地环境(推荐实战)
bash
运行

1. 全局安装TypeScript

npm install -g typescript

2. 创建TS文件(如index.ts)

echo "let msg: string = 'Hello TypeScript';" > index.ts

3. 编译TS为JS(生成index.js)

tsc index.ts

4. 运行JS文件

node index.js
方式 3:HTML 中直接使用(CDN 版,适合演示)
html
预览


二、核心语法:静态类型(TS 精髓)
TypeScript 核心是「类型注解」,为变量 / 函数 / 对象指定类型,提前拦截类型错误,直接复制示例即可运行:

  1. 基础类型
    typescript
    运行
    // 字符串
    let username: string = "张三";
    // 数字
    let age: number = 20;
    // 布尔
    let isStudent: boolean = true;
    // 空值(无返回值)
    function sayHello(): void {
    console.log("Hello TS");
    }
    // 任意类型(不推荐,失去TS类型校验意义)
    let anyValue: any = "任意值";
    anyValue = 123; // 不会报错

// 数组(两种写法)
let arr1: number[] = [1, 2, 3];
let arr2: Array = ["a", "b", "c"];

// 元组(固定长度+类型的数组)
let tuple: [string, number] = ["张三", 20];
// tuple = [20, "张三"]; // 报错:类型顺序不匹配

// 枚举(自定义常量集合)
enum Gender {
Male = 1,
Female = 2,
Unknown = 0
}
let userGender: Gender = Gender.Male;
console.log(userGender); // 输出1

// 空/未定义
let nullVal: null = null;
let undefinedVal: undefined = undefined;

  1. 函数类型(参数 + 返回值注解)
    typescript
    运行
    // 基础函数类型
    function add(a: number, b: number): number {
    return a + b;
    }
    add(1, 2); // 正确
    // add(1, "2"); // 报错:参数2不是数字

// 可选参数(加?)
function getUserInfo(name: string, age?: number): string {
return age ? ${name} - ${age}岁 : name;
}
getUserInfo("张三"); // 正确
getUserInfo("张三", 20); // 正确

// 默认参数
function greet(name: string = "游客"): void {
console.log(你好,${name});
}

// 剩余参数
function sum(...nums: number[]): number {
return nums.reduce((total, num) => total + num, 0);
}
sum(1, 2, 3); // 输出6

// 函数类型别名
type MathFunc = (a: number, b: number) => number;
const multiply: MathFunc = (a, b) => a * b;

  1. 接口(Interface):约束对象 / 类结构
    typescript
    运行
    // 基础接口(约束对象)
    interface User {
    id: number;
    name: string;
    age?: number; // 可选属性
    readonly gender: string; // 只读属性
    }

// 使用接口
let user: User = {
id: 1,
name: "张三",
gender: "男"
};
// user.gender = "女"; // 报错:只读属性不可修改

// 接口继承
interface Student extends User {
className: string; // 新增属性
}
let student: Student = {
id: 2,
name: "李四",
gender: "男",
className: "前端1班"
};

// 函数接口
interface SearchFunc {
(keyword: string, page: number): boolean;
}
const search: SearchFunc = (keyword, page) => {
console.log(搜索:${keyword},页码:${page});
return true;
};

  1. 类型别名(Type):自定义类型
    typescript
    运行
    // 基础类型别名
    type ID = number | string; // 联合类型
    let userId: ID = 1001;
    userId = "user_1001"; // 正确

// 对象类型别名
type Product = {
id: ID;
name: string;
price: number;
status: "on_sale" | "off_sale"; // 字面量类型
};
let product: Product = {
id: "prod_001",
name: "TS教程",
price: 99,
status: "on_sale"
};

// 交叉类型(合并多个类型)
type Person = {
name: string;
age: number;
};
type Contact = {
phone: string;
email: string;
};
type UserProfile = Person & Contact; // 同时包含Person和Contact的属性
let profile: UserProfile = {
name: "王五",
age: 25,
phone: "13800138000",
email: "wangwu@example.com"
};

  1. 类(Class):面向对象编程
    typescript
    运行
    // 基础类
    class Person {
    // 类属性类型注解
    name: string;
    age: number;

    // 构造函数
    constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
    }

    // 方法
    sayHello(): void {
    console.log(我是${this.name},今年${this.age}岁);
    }
    }

// 实例化
const person = new Person("张三", 20);
person.sayHello();

// 类的访问修饰符
class Employee extends Person {
private salary: number; // 私有属性(仅类内部可访问)
protected department: string; // 受保护属性(类内部+子类可访问)
public id: number; // 公共属性(默认)

constructor(name: string, age: number, salary: number, department: string, id: number) {
super(name, age); // 调用父类构造函数
this.salary = salary;
this.department = department;
this.id = id;
}

getSalary(): number {
return this.salary; // 私有属性内部可访问
}
}

const emp = new Employee("李四", 25, 10000, "研发部", 1001);
// console.log(emp.salary); // 报错:私有属性不可外部访问
console.log(emp.getSalary()); // 正确:通过方法访问

  1. 泛型(Generic):复用类型逻辑
    泛型是 TS 高级特性,解决「类型不固定」的复用问题,核心是「类型参数化」:
    typescript
    运行
    // 基础泛型函数(复用数组反转逻辑)
    function reverse(arr: T[]): T[] {
    return arr.reverse();
    }
    // 数字数组
    reverse([1, 2, 3]); // 输出[3,2,1]
    // 字符串数组
    reverse(["a", "b", "c"]); // 输出["c","b","a"]

// 泛型接口
interface Result {
code: number;
data: T;
msg: string;
}
// 接口复用:不同数据类型的返回结果
type UserResult = Result;
type ProductResult = Result;

// 泛型类
class Cache {
private data: T[] = [];

add(item: T): void {
this.data.push(item);
}

get(index: number): T {
return this.data[index];
}
}
// 缓存数字
const numCache = new Cache();
numCache.add(1);
// 缓存用户
const userCache = new Cache();
userCache.add({ id: 1, name: "张三", gender: "男" });
三、实战示例:完整 TypeScript 代码
直接复制以下代码到 index.ts,编译运行即可体验 TS 核心特性:
typescript
运行
// 1. 定义接口
interface User {
id: number | string;
name: string;
age?: number;
hobbies: string[];
}

// 2. 定义泛型函数
function formatUser(user: T): string {
const ageStr = user.age ? ,年龄${user.age}岁 : "";
const hobbiesStr = user.hobbies.length > 0 ? ,爱好:${user.hobbies.join("、")} : "";
return 用户ID:${user.id},姓名:${user.name}${ageStr}${hobbiesStr};
}

// 3. 定义类
class UserService {
private users: User[] = [];

// 添加用户
addUser(user: User): void {
this.users.push(user);
}

// 获取用户
getUserById(id: number | string): User | undefined {
return this.users.find(user => user.id === id);
}

// 格式化所有用户
formatAllUsers(): string[] {
return this.users.map(user => formatUser(user));
}
}

// 4. 业务逻辑
const userService = new UserService();

// 添加用户
userService.addUser({
id: 1,
name: "张三",
age: 20,
hobbies: ["编程", "阅读"]
});
userService.addUser({
id: "2",
name: "李四",
hobbies: ["运动"]
});

// 获取并格式化用户
const user1 = userService.getUserById(1);
if (user1) {
console.log(formatUser(user1));
}

// 格式化所有用户
console.log("所有用户:", userService.formatAllUsers());
编译运行:
bash
运行

编译TS为JS

tsc index.ts

运行JS

node index.js
输出结果:
plaintext
用户ID:1,姓名:张三,年龄20岁,爱好:编程、阅读
所有用户: [
'用户ID:1,姓名:张三,年龄20岁,爱好:编程、阅读',
'用户ID:2,姓名:李四,爱好:运动'
]
四、TS 工程化配置(tsconfig.json)
大型项目需通过 tsconfig.json 配置编译规则,直接复制以下配置到项目根目录:
json
{
"compilerOptions": {
"target": "ES6", // 编译目标JS版本
"module": "ESNext", // 模块系统
"outDir": "./dist", // 编译输出目录
"rootDir": "./src", // 源码目录
"strict": true, // 开启严格模式(推荐)
"esModuleInterop": true, // 兼容CommonJS/ES模块
"skipLibCheck": true, // 跳过库文件类型检查
"forceConsistentCasingInFileNames": true, // 强制文件名大小写一致
"resolveJsonModule": true, // 支持导入JSON文件
"sourceMap": true // 生成sourceMap(方便调试)
},
"include": ["src/*/"], // 包含的文件
"exclude": ["node_modules", "dist"] // 排除的文件
}
五、TypeScript 核心优势与避坑指南

  1. 核心优势
    静态类型校验:编码阶段发现错误,减少线上 BUG;
    代码提示完善:编辑器(VSCode)自动补全、类型提示,提升开发效率;
    代码可维护性:类型注解即文档,团队协作更清晰;
    兼容 JS 生态:所有 JS 代码可直接作为 TS 代码运行,支持渐进式迁移。
  2. 常见坑点
    any 类型滥用:过度使用 any 会失去 TS 类型校验的意义,尽量用具体类型 / 泛型替代;
    类型断言滥用:as 断言仅欺骗编译器,不会改变运行时类型,需谨慎使用;
    typescript
    运行
    // 不推荐:强制断言可能导致运行时错误
    let num: any = "123";
    let num2 = num as number;
    接口 vs 类型别名:
    接口(interface):适合扩展(继承)、约束对象 / 类;
    类型别名(type):适合联合类型、交叉类型、基础类型复用;
    泛型过度复杂:简单场景无需泛型,避免过度设计。
  3. 与框架结合
    Vue3:默认支持 TS,组件 / 组合式 API 可直接添加类型注解;
    React:通过 @types/react 提供类型支持,函数组件 / 类组件均可使用 TS;
    Node.js:通过 @types/node 提供内置模块类型定义。
    以上内容可直接复制到博客编辑器(开启代码块高亮),替换示例中的业务逻辑,即可快速掌握 TypeScript 核心用法。TS 是前端进阶的必备技能,掌握静态类型思维,能显著提升大型项目的开发效率和可维护性。
相关文章
|
13天前
|
数据采集 人工智能 安全
|
8天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
644 4
|
8天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
348 164
|
7天前
|
机器学习/深度学习 自然语言处理 机器人
阿里云百炼大模型赋能|打造企业级电话智能体与智能呼叫中心完整方案
畅信达基于阿里云百炼大模型推出MVB2000V5智能呼叫中心方案,融合LLM与MRCP+WebSocket技术,实现语音识别率超95%、低延迟交互。通过电话智能体与座席助手协同,自动化处理80%咨询,降本增效显著,适配金融、电商、医疗等多行业场景。
359 155

热门文章

最新文章