TypeScript 与 JavaScript 的区别

理解 TypeScript 的特性以及它与 JavaScript 的关系

问题

TypeScript 是什么?它与 JavaScript 有什么区别?

解答

TypeScript 是什么

TypeScript 是 JavaScript 的超集,在 JavaScript 基础上增加了静态类型系统。它支持 ES6+ 语法,并提供了面向对象编程的特性,如类、接口、继承、泛型等。

所谓”超集”,是指 TypeScript 包含了 JavaScript 的所有功能,并在此基础上进行了扩展。任何有效的 JavaScript 代码都是有效的 TypeScript 代码。

编译过程

TypeScript 代码需要编译成 JavaScript 才能运行。编译前:

const hello: string = "Hello World!"
console.log(hello)

编译后:

const hello = "Hello World!"
console.log(hello)

主要特性

类型批注

可以显式声明变量类型,在编译时进行类型检查:

function Add(left: number, right: number): number {
  return left + right;
}

基本类型包括 numberbooleanstring,动态类型使用 any

类型推断

未显式声明类型时,TypeScript 会自动推断:

let str = 'string'  // 自动推断为 string 类型

类型推断发生在变量初始化、设置默认参数值和决定函数返回值时。如果无法推断,则默认为 any 类型。

接口

用于定义对象的结构:

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

枚举

用于定义一组命名常量:

enum Color {
  Red,
  Green,
  Blue
}

泛型

编写可复用的代码,类型在使用时指定:

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

元组

固定长度和类型的数组:

let tuple: [string, number] = ['hello', 10]

关键点

  • TypeScript 是 JavaScript 的超集,添加了静态类型系统
  • 在编译阶段进行类型检查,可以提前发现错误
  • 支持类型批注和类型推断两种方式
  • 需要编译成 JavaScript 才能运行,编译时会擦除类型信息
  • 提供接口、枚举、泛型等高级特性,适合大型项目开发