TS入门教程

一、TypeScript 简介

TypeScript(TS) 是微软推出的一种 JavaScript 超集,添加了静态类型检查 ,可编译为纯 JavaScript。

适合中大型项目开发,解决了 JS 中类型不明确、运行时报错多等问题。

TS 优势

  • 支持 静态类型检查,开发阶段发现错误

  • 更好的 代码提示与补全

  • 强类型约束提升 代码可维护性

  • 更适合 团队协作大型项目

示例:

ts 复制代码
let age: number = 25;
// age = 'hello'; // 报错:不能将 string 赋值给 number

二、为什么要使用 TypeScript?

JS 存在的问题

  • 动态类型 → 容易出错

  • 属性拼写错误 → 无提示,运行时报错

  • 条件逻辑冗余 → 不易发现逻辑死区

示例:

js 复制代码
// JavaScript 中不会报错,但运行时出错
const user = { name: "Tom" };
console.log(user.age.toFixed(2)); // 运行时报错
ts 复制代码
// TypeScript 中编译报错
interface User {
  name: string;
}
const user: User = { name: "Tom" };
console.log(user.age.toFixed(2)); // 报错:age 不存在

三、TypeScript 编译与配置

TSC 编译命令

  • tsc index.ts → 编译单个文件

  • tsc → 使用 tsconfig.json 自动编译整个项目

  • tsc --watch → 监听文件变化,自动编译

tsconfig.json 示例

json 复制代码
{
  "compilerOptions": {
    "target": "es6",
    "strict": true,
    "outDir": "./dist"
  },
  "include": ["src"]
}

四、基础类型

类型 描述 示例
string 字符串类型 let name: string = "Alice";
number 数字类型(整数/浮点数) let age: number = 30;
boolean 布尔值 let isDone: boolean = false;
void 无返回值(用于函数) function log(): void { console.log('hi'); }
any 任意类型,关闭类型检查 let value: any = 5; value = "hello";
unknown 表示未知类型,需判断再用 见下示例
never 表示永远不会返回的值 见下示例

五、特殊类型详解

any vs unknown

ts 复制代码
let a: any = 123;
a = "abc";
a.toUpperCase(); // ✅ 不报错,但存在隐患

let b: unknown = "abc";
b.toUpperCase(); // ❌ 报错,需要先判断

if (typeof b === 'string') {
  console.log(b.toUpperCase()); // ✅ 类型缩小后使用
}

never 类型

用于函数永远不会返回值的情况,例如死循环或抛错:

ts 复制代码
function error(message: string): never {
  throw new Error(message);
}

void 类型

用于无返回值的函数:

ts 复制代码
function greet(name: string): void {
  console.log("Hello, " + name);
}

六、类型推断与包装对象

类型推断

TypeScript 会根据初始值推断类型:

ts 复制代码
let count = 10;  // 推断为 number

基本类型 vs 包装对象

ts 复制代码
let str: string = 'hello';  // 原始类型,推荐
let strObj: String = new String('hello'); // 包装对象,不推荐

访问属性时,JS 会隐式地将原始类型自动装箱:

ts 复制代码
let name = "Alice";
console.log(name.length); // 实际调用的是包装对象的 length 属性

七、自定义类型

使用 typeinterface

ts 复制代码
type User = {
  id: number;
  name: string;
}

interface Product {
  id: number;
  title: string;
}

支持嵌套与联合类型:

ts 复制代码
type Response = string | number | boolean;

八、实战建议与最佳实践

  • 尽量避免使用 any

  • 合理使用 unknown 提高安全性

  • 使用 interface/type 约束对象结构

  • 区分 voidundefined,注意语义差异

  • 利用 tsconfig.json 优化开发体验


结语

TypeScript 能显著提升代码质量,是现代前端工程化的重要工具。理解其类型系统、编译机制和错误提示机制,能帮助开发者在项目中更加游刃有余。


相关推荐
程序猿_极客7 小时前
【期末网页设计作业】HTML+CSS+JavaScript 蜡笔小新 动漫主题网站设计与实现(附源码)
前端·javascript·css·html·课程设计·期末网页设计
zl_vslam7 小时前
SLAM中的非线性优-3D图优化之轴角在Opencv-PNP中的应用(一)
前端·人工智能·算法·计算机视觉·slam se2 非线性优化
CDwenhuohuo8 小时前
用spark-md5实现切片上传前端起node模拟上传文件大小,消耗时间
前端
阿桂有点桂8 小时前
React使用笔记(持续更新中)
前端·javascript·react.js·react
自由日记8 小时前
实例:跳动的心,火柴人
前端·css·css3
柯腾啊8 小时前
一文简单入门 Axios
前端·axios·apifox
im_AMBER8 小时前
React 15
前端·javascript·笔记·学习·react.js·前端框架
How_doyou_do9 小时前
模态框的两种管理思路
java·服务器·前端
snow@li9 小时前
前端:前端/浏览器 可以录屏吗 / 实践 / 录制 Microsoft Edge 标签页、应用窗口、整个屏幕
前端·浏览器录屏·前端录屏·web录屏
李贺梖梖9 小时前
CSS学习
前端·css