# 什么是 TypeScript

# 特性

# 类型系统

  • 按照 类型检查时机, 分为 动态类型 和 静态类型

  • 动态类型,运行时才会进行类型检查,类型错误导致运行错误,JavaScript 是动态类型

  • 静态类型,编译阶段确定每个变量的类型,类型错误导致语法错误,TypeScript是静态类型

let foo = 1;
foo.split(' ');
// JavaScript
// Uncaught TypeError: foo.split is not a function
// 运行时会报错(foo.split 不是一个函数),造成线上 bug

// TypeScript
// Property 'split' does not exist on type 'number'.
// 编译时会报错(数字没有 split 方法),无法通过编译
1
2
3
4
5
6
7
8
9
  • 按照 是否允许隐式类型转换,分为强类型和弱类型

  • Typescript 和 JavaScript 都是弱类型

# TypeScript 完全兼容 JavaScript,不会修改 JavaScript 运行时特性

# TypeScript 可以编译为 JavaScript,然后在任何能运行 JavaScript 的环境中

# 与 JavaScript 的区别

TypeScript JavaScript
类型约束 无类型约束
隐式类型转换,编译时可以确定 隐式类型转换,无法在编译时确定
编译时对类型静态检查 运行时才会检查

# 收获

  • 了解 类型系统

  • 了解 TypeScript 和 JavaScript 的区别