目录

一、TypeScript 简介

二、核心特性

三、基础语法

1. 字符串(String)

2. 数字(Number)

3. 布尔值(Boolean)

4. 数组(Array)

5. 元组(Tuple)

6. 函数声明

7. 函数重载

8. 基础接口

9. 高级接口特性

 10.Void 和 Never

11.Null 和 Undefined

四、高级特性

4.1泛型

4.2装饰器

4.3联合类型与交叉类型

五、ts对比js

一、核心关系:超集与子集

代码兼容性

二、核心区别对比

1. 类型系统:最大的不同

JavaScript (动态类型)

TypeScript (静态类型)

2. 开发体验对比

JavaScript

TypeScript

三、TypeScript 的核心优势

1. 类型安全与错误预防

2. 更好的代码维护性

大型项目中的优势

六、总结


一、TypeScript 简介

        TypeScript 是 JavaScript 的超集,由微软开发并开源。它为 JavaScript 添加了静态类型系统,使得代码更加健壮、可维护。TypeScript 最终会被编译为纯 JavaScript,因此可以在任何支持 JavaScript 的环境中运行。

二、核心特性

  • 静态类型检查:TypeScript 允许在开发阶段进行类型检查,避免运行时错误。
  • 类型推断:TypeScript 能根据赋值自动推断变量类型,减少显式类型注解的需求。
  • 接口和类:支持面向对象编程,提供接口、类、继承等特性。
  • 泛型:允许编写灵活且类型安全的代码。
  • 模块化:支持 ES6 模块语法,便于代码组织。

三、基础语法

// 变量类型注解
let name: string = "John";
let age: number = 30;
let isActive: boolean = true;

// 数组和元组
let numbers: number[] = [1, 2, 3];
let tuple: [string, number] = ["John", 30];

// 函数类型
function greet(name: string): string {
  return `Hello, ${name}!`;
}

// 接口
interface Person {
  name: string;
  age: number;
}

const person: Person = {
  name: "John",
  age: 30
};

1. 字符串(String)

let name: string = "John";
let message: string = `Hello, ${name}!`; // 模板字符串

// 特点:
// - 支持单引号、双引号、模板字符串
// - 自动类型推断:let greeting = "Hello" // 自动推断为 string

2. 数字(Number)

let age: number = 30;
let price: number = 99.99;
let binary: number = 0b1010;    // 二进制
let octal: number = 0o744;      // 八进制
let hex: number = 0xf00d;       // 十六进制

// 特点:
// - 不区分整数和浮点数
// - 支持各种进制表示法
// - 包含 NaN, Infinity

3. 布尔值(Boolean)

let isActive: boolean = true;
let isLoading: boolean = false;

// 特点:
// - 只有 true 和 false 两个值
// - 不能使用 0/1 或 "true"/"false"

4. 数组(Array)

// 两种声明方式
let numbers: number[] = [1, 2, 3];
let strings: Array<string> = ["a", "b", "c"];

// 只读数组
let readonlyNumbers: readonly number[] = [1, 2, 3];
// readonlyNumbers.push(4); // ❌ 错误:只读数组不能修改

// 特点:
// - 类型统一:数组内所有元素类型相同
// - 支持泛型语法:Array<T>
// - 可设置为只读:readonly T[]

5. 元组(Tuple)

// 固定长度和类型的数组
let tuple: [string, number] = ["John", 30];
let point: [number, number, number] = [10, 20, 30];

// 可选元素的元组
let optionalTuple: [string, number?] = ["hello"]; // 第二个元素可选

// 剩余元素的元组
let restTuple: [string, ...number[]] = ["hello", 1, 2, 3];

// 特点:
// - 固定长度和特定位置类型
// - 支持可选元素(?)
// - 支持剩余元素(...)
// - 常用于函数返回多个值

6. 函数声明

// 基础函数类型
function greet(name: string): string {
  return `Hello, ${name}!`;
}

// 箭头函数
const greetArrow: (name: string) => string = (name) => {
  return `Hello, ${name}!`;
};

// 可选参数和默认参数
function createUser(name: string, age?: number, country: string = "China"): void {
  console.log(`${name}, ${age}, ${country}`);
}

7. 函数重载

// 重载签名
function processInput(input: string): string;
function processInput(input: number): number;

// 实现签名
function processInput(input: string | number): string | number {
  if (typeof input === "string") {
    return input.toUpperCase();
  } else {
    return input * 2;
  }
}

// 使用
const result1 = processInput("hello"); // string
const result2 = processInput(10);      // number

8. 基础接口

interface Person {
  name: string;
  age: number;
}

const person: Person = {
  name: "John",
  age: 30
};

// 可选属性
interface Config {
  url: string;
  timeout?: number;  // 可选
  retry?: boolean;   // 可选
}

9. 高级接口特性

// 只读属性
interface Point {
  readonly x: number;
  readonly y: number;
}

// 索引签名
interface StringArray {
  [index: number]: string;
}

// 函数类型接口
interface SearchFunc {
  (source: string, subString: string): boolean;
}

 10.Void 和 Never

// void - 没有返回值
function logMessage(message: string): void {
  console.log(message);
}

// never - 永远不会返回
function throwError(message: string): never {
  throw new Error(message);
}

function infiniteLoop(): never {
  while (true) {
    // 无限循环
  }
}

11.Null 和 Undefined

let u: undefined = undefined;
let n: null = null;

// 严格模式下需要显式声明
let maybeString: string | undefined = undefined;
let maybeNumber: number | null = null;

四、高级特性

4.1泛型

泛型允许在定义函数、接口或类时不预先指定具体类型,而是在使用时动态指定。

function identity<T>(arg: T): T {
  return arg;
}

let output = identity<string>("hello");

4.2装饰器

function log(target: any, key: string) {
  console.log(`${key} was called`);
}

class MyClass {
  @log
  greet() {
    console.log("Hello!");
  }
}

4.3联合类型与交叉类型

type StringOrNumber = string | number;
type NameAndAge = { name: string } & { age: number };
 

五、ts对比js

一、核心关系:超集与子集

代码兼容性

// 所有合法的 JavaScript 代码都是合法的 TypeScript 代码
// ✅ JavaScript 代码在 TypeScript 中完全兼容

// JavaScript
function greet(name) {
    return "Hello, " + name;
}

// TypeScript (完全兼容上面的 JS 代码)
function greet(name: string): string {
    return "Hello, " + name;
}

二、核心区别对比

1. 类型系统:最大的不同

JavaScript (动态类型)
// 运行时才会发现错误
let user = { name: "John", age: 30 };
user.nmae = "Mike";  // ❌ 拼写错误,但运行时才会报错
console.log(user.nmae); // undefined

// 变量类型可以随意改变
let data = "hello";
data = 42;        // ✅ 允许
data = true;      // ✅ 允许
data = { key: "value" }; // ✅ 允许
TypeScript (静态类型)
// 编译时就能发现错误
interface User {
    name: string;
    age: number;
}

let user: User = { name: "John", age: 30 };
user.nmae = "Mike";  // ❌ 编译时错误:属性 'nmae' 不存在

// 类型安全
let data: string = "hello";
data = 42;        // ❌ 编译错误:不能将 number 分配给 string

2. 开发体验对比

JavaScript
// 需要运行时测试才能发现问题
function calculateTotal(price, quantity) {
    return price * quantity;  // 如果传入字符串,会得到 NaN
}

// 调用时可能出错
calculateTotal("10", "5");  // 返回 "105" (字符串拼接)
calculateTotal(10, 5);      // 返回 50
TypeScript
// 编译时类型检查
function calculateTotal(price: number, quantity: number): number {
    return price * quantity;
}

// 调用时类型安全
calculateTotal("10", "5");  // ❌ 编译错误:参数类型不匹配
calculateTotal(10, 5);      // ✅ 正确

三、TypeScript 的核心优势

1. 类型安全与错误预防

// 接口定义 - 明确的契约
interface Product {
    id: number;
    name: string;
    price: number;
    inStock: boolean;
}

// 函数使用接口 - 编译时验证
function displayProduct(product: Product): void {
    console.log(`${product.name}: $${product.price}`);
    // product.nme ❌ 拼写错误立即报错
}

// 自动补全和智能提示
const product: Product = {
    id: 1,
    name: "Laptop",
    price: 999,
    inStock: true
    // 如果缺少 required 属性,编译时报错
};

2. 更好的代码维护性

大型项目中的优势
// 清晰的 API 契约
interface UserService {
    getUser(id: number): Promise<User>;
    createUser(user: Omit<User, 'id'>): Promise<User>;
    updateUser(id: number, updates: Partial<User>): Promise<User>;
}

// 实现必须符合接口
class UserServiceImpl implements UserService {
    async getUser(id: number): Promise<User> {
        // 实现细节
    }
    // 如果缺少方法或签名不匹配,编译错误
}

六、总结

TypeScript 是 JavaScript 的超集,在保留 JavaScript 所有特性的基础上,引入了强大的静态类型系统。它不是一门全新的语言,而是为 JavaScript 添加了类型安全和开发效率的工具层。

核心优势

1.类型安全

2. 开发效率提升

3. 可维护性

1.核心特性体系

1. 基础类型系统

  • 原始类型:string、number、boolean 等基础构建块

  • 数组和元组:处理集合数据的类型安全方案

  • 函数类型:确保函数输入输出的类型正确性

2. 高级类型特性

  • 接口(Interface):定义对象形状的主要工具,支持继承和声明合并

  • 类型别名(Type Alias):处理复杂类型操作和联合类型

  • 泛型(Generics):创建可重用、类型安全的组件

  • 联合类型与交叉类型:提供灵活而精确的类型组合能力

3. 类型操作能力

  • 类型推断:自动推导变量类型,减少冗余注解

  • 类型守卫:运行时类型检查与编译时类型收窄

  • 映射类型:基于现有类型创建新类型

  • 条件类型:根据条件动态决定类型

TypeScript 已经成为现代前端开发的事实标准,随着生态系统的不断完善和开发者社区的持续贡献,它在 Web 开发、Node.js 服务端、移动开发等领域的应用将更加广泛。掌握 TypeScript 不仅是学习一门工具,更是培养类型思维——这种思维方式将在整个编程生涯中持续创造价值。

TypeScript 让 JavaScript 开发从"写时快乐,维护痛苦"转变为"写时严谨,长期受益"的可持续发展模式。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐