TypeScript 终极入门指南:从零到精通 🚀

本文涉及的产品
多模态交互后付费免费试用,全链路、全Agent
简介: TypeScript是JavaScript的超集,添加静态类型系统,提升代码健壮性与可维护性。本教程涵盖基础类型、高级特性、面向对象编程及最佳实践,配代码示例与图解,助你快速掌握TS核心概念,轻松进阶前端开发!🎉

好的!以下是一份详细的 TypeScript 教程博客,包含代码示例、解释、图表和表情,帮助读者轻松上手并深入理解 TypeScript 的核心概念。🎉


TypeScript 是 JavaScript 的超集,添加了静态类型系统

目录 📚

  1. 什么是 TypeScript?
  2. 为什么使用 TypeScript?
  3. 安装与配置
  4. 基础类型与语法
  5. 高级类型与工具
  6. 面向对象编程
  7. 实用工具与最佳实践

1. 什么是 TypeScript?

TypeScript 是 JavaScript 的超集,由 Microsoft 开发,通过添加静态类型系统高级语法特性,让代码更健壮、易维护。最终会被编译成纯 JavaScript。

// 简单示例:类型注解
function greet(name: string): string {
  return `Hello, ${name}! 👋`;
}
console.log(greet("Alice")); // 输出: Hello, Alice! 👋

2. 为什么使用 TypeScript?

  • 🛡️ 类型安全:编译时捕捉错误,减少运行时崩溃。
  • 🧩 代码智能提示:IDE 支持更强大的自动补全。
  • 🔍 可读性:显式类型注解让代码意图更清晰。
  • 渐进式:可逐步迁移现有 JavaScript 项目。


TypeScript 编译流程包含类型检查


3. 安装与配置

安装

npm install -g typescript

初始化项目

tsc --init  # 生成 tsconfig.json

示例 tsconfig.json

{
  "compilerOptions": {
    "target": "ES6",
    "module": "CommonJS",
    "strict": true,
    "outDir": "./dist"
  }
}

编译命令

命令行编译

每写一次ts文件,开发人员每次都要编译一次ts文件

# tsc +ts文件名
# 例如:需要编译index.ts文件(后缀可省略)
tsc index

左边为:编译生成的js文件

自动化编译

修改或新增ts文件后,会自动更新或生成js文件

操作步骤:

执行命令:tsc --init 后会生成tsconfig.json文件

命令:tsc --watch

作用:监视当前整个目录的文件

命令:tsc  --watch index.ts

作用:监视index.ts文件

tsc --watch #监视当前整个目录的文件
tsc  --watch index.ts # 监视index.ts文件

4. 基础类型与语法

基本类型声明注解

Ts继承了Js的所有对象

Ts中相较于Js多加了6个新类型:

any  

unknown

never

void

tuple

enum

let isDone: boolean = false;
let count: number = 42;
let message: string = "TypeScript Rocks! 🎉";
// 数组与元组
let numbers: number[] = [1, 2, 3];
let tuple: [string, number] = ["Alice", 30];
// 类型推断(无需显式注解),根据数据推断类型
let inferredString = "Hello"; // 类型为 string

1. any

any  : 任意类型,想存什么存什么

不建议使用

let a :any
a=10
a="abc"
a=false
console.log(a)
// 或
let b
b = 10
b="abc"
b=true
console.log(b)

注意点:any会穿透某一个数据的类型

let a :any
a=10
let userName :string 
userName = a
console.log(userName)
console.log(typeof userName)

2. unknown

解释:未知的,不知道定义的数据到底会成什么类型

是一个类型安全的any

let a :unknown
a=99
a="abc"
console.log(a)

注意点:使用unknown时,需要使用其他类型的方法时,需要判断或者断言

let userName :unknown
userName="张三"
// 方法一
if(typeof userName=="string"){
    console.log(userName.length)
}
// 方法二 :断言1
let a:string
a=userName as string
console.log(a.length)
// 方法三:断言2
let b :string
b=<string>a
console.log(b.length)

3. never

解释:从不

作用:

几乎不用never区直接限制变量,没有意义,不建议使用

never时ts主动推断出来的

never可以用于限制的函数值

  • 没加never
function demo(){
}
console.log(demo())

  • 加never
function demo():never{
   
}
console.log(demo())

4. void

解释:空

作用:

限制函数返回值 【函数返回值为空,调用者也不应依赖其返回值进行任何操作】

注意:undined是void可以接受的一种空

5. Object

结论:无论是object和Object,在实际开发中用的相对较少,因为范围太大了。

例如:object除了原始类型,其他类型都可以给它赋值。

扩展:原始类型:number/boolean/string/null/undefined

例如:Object  可以调用到Object方法的类型:

如:toString()方法

总结:Object除了null和undefined其他的都可以存。

函数类型

// 参数和返回值类型
function add(a: number, b: number): number {
  return a + b;
}
// 可选参数与默认值
function logMessage(message: string, prefix?: string = "INFO"): void {
  console.log(`[${prefix}] ${message}`);
}

5. 高级类型与工具

联合类型与交叉类型

type ID = string | number;
let userId: ID = "ABC123";
interface Person {
  name: string;
}
interface Employee {
  id: number;
}
type EmployeePerson = Person & Employee; // 合并类型

泛型

function identity<T>(arg: T): T {
  return arg;
}
identity<string>("Hello"); // 显式指定类型
identity(42); // 类型推断为 number

实用工具类型

interface User {
  name: string;
  age: number;
  email?: string;
}
type PartialUser = Partial<User>; // 所有属性变为可选
type ReadonlyUser = Readonly<User>; // 所有属性只读

6. 面向对象编程

类与继承

class Animal {
  constructor(public name: string) {} // 自动分配属性
  move(distance: number = 0) {
    console.log(`${this.name} moved ${distance}m. 🏃`);
  }
}
class Dog extends Animal {
  bark() {
    console.log("Woof! 🐶");
  }
}
const dog = new Dog("Buddy");
dog.bark(); // Woof! 🐶
dog.move(10); // Buddy moved 10m. 🏃

接口与实现

interface Shape {
  area(): number;
}
class Circle implements Shape {
  constructor(private radius: number) {}
  area() {
    return Math.PI * this.radius ** 2;
  }
}

7. 最佳实践

  • 启用严格模式:在 tsconfig.json 中设置 "strict": true
  • 🔄 逐步迁移:将 .js 文件重命名为 .ts 并逐步修复类型错误。
  • 🛠️ 使用类型别名和接口:优先用 interface 描述对象结构,用 type 处理复杂类型逻辑。
  • ⚠️ 避免 any 类型:除非必要,尽量用明确的类型注解。

总结 🎯

TypeScript 通过静态类型和现代语法,显著提升了 JavaScript 的可维护性和开发体验。从基础类型到高级泛型,再到面向对象设计,逐步掌握这些概念将让你写出更健壮的代码!

动手练习:尝试将你的 JavaScript 项目迁移到 TypeScript,并解决遇到的所有类型错误! 💻


有任何问题或想深入讨论?欢迎在评论区留言! 💬👇

目录
相关文章
|
JavaScript 前端开发
【TypeScript入门】TypeScript入门篇——数据类型
我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘汉’的区别的,因此,在每个编程语言里都会有一个叫数据类型的东东,其实就是对常用的各种数据类型进行了明确的划分,你想让计算机进行数值运算,你就传数字给它,你想让他处理文字,就传字符串类型给他。
150 3
|
JavaScript 前端开发 编译器
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
266 0
|
编解码 JavaScript 前端开发
TypeScript【第三方声明文件、自定义声明文件、tsconfig.json文件简介、tsconfig.json 文件结构与配置】(六)-全面详解(学习总结---从入门到深化)
TypeScript【第三方声明文件、自定义声明文件、tsconfig.json文件简介、tsconfig.json 文件结构与配置】(六)-全面详解(学习总结---从入门到深化)
664 0
|
JavaScript
TypeScript【类的继承、访问修饰符、readonly 修饰符、存取器、实例方法与静态方法、实例属性与静态属性、静态属性、抽象类】(三)-全面详解(学习总结---从入门到深化)
TypeScript【类的继承、访问修饰符、readonly 修饰符、存取器、实例方法与静态方法、实例属性与静态属性、静态属性、抽象类】(三)-全面详解(学习总结---从入门到深化)
157 0
|
12月前
|
JavaScript 前端开发 编译器
【小白入门】 浏览器如何识别Typescript?
【10月更文挑战第1天】浏览器如何识别Typescript?
|
JavaScript 前端开发 编译器
TypeScript,从0到入门带你进入类型的世界
该文章提供了TypeScript的入门指南,从安装配置到基础语法,再到高级特性如泛型、接口等的使用,帮助初学者快速掌握TypeScript的基本用法。
|
JavaScript 前端开发 程序员
typescript入门笔记分享
typescript入门笔记分享
91 0
|
JavaScript 前端开发
TypeScript极速入门笔记1
TypeScript极速入门笔记1
140 4
|
JavaScript
vite+typescript从入门到实战(三)
vite+typescript从入门到实战
199 0
|
JavaScript
vite+typescript从入门到实战(二)
vite+typescript从入门到实战
151 0