TypeScript 是 JavaScript 的超集,正因为它是建立在 JavaScript 上的一门语言,TypeScript 把其他语言中的一些精妙的语法带入到了 JavaScript 之中,从而把 JS 带入到了一个新的高度,在 TS 里面可以使用各种 JS 之外的扩展语法,同时 TS 对面向对象和静态类型的良好支持,你可以建造出更健壮,更可维护的大型项目,
什么是 TypeScript,打开 https://www.typescriptlang.org/, TypeScript is a typed superset of JavaScript that compiles to plain JavaScript。这就是官网对 TypeScript 的准确定义,它说 TypeScript 是 JavaScript 的一个超集,而且它拥有类型机制,它不会直接在浏览器执行,它会在编译成 JavaScript 后才能够被执行
什么是超集,比如说 ES6 是 ES5 的一个超集,因为 ES6 兼容了 ES5 所有的语法的情况下,还提出了自己一些新有的独特的语法,所以 ES6 包含了 ES5 所有的内容,包括一些额外的东西,那我们就可以说 ES6 是 ES5 的一个超集。TypeScript 是 JavaScript 的一个超集,就意味着,它除了包含 ES6 ES5 这样的基础的绝大多数的特性之外,它还有一些自己独特的语法特性,所以学习 TypeScript 就是在 ES6 ES5 基础上去学习 TypeScript 的一些独特的语法。
我们说 TypeScript 有自己的类型,这里的类型实际上是一种静态的类型,我们通过代码举个例子就明白了
demo.js
// a 是一个动态类型,它的类型可以随着赋值改变 let a = 123; // 这个时候 a 是一个基础类型,是一个 number 类型的变量 a = '123'; // 这个时候,a 是一个 string 类型的变量,这个时候不会报错
demo.ts
// 静态类型 let b = 123; b = '123'; /** * 这个时候报错了,Type '123' is not assignable to type 'number', * string 类型无法存到 number 类型的变量里面去 * b 开始定义的是数字类型,未来也只能是数字类型 */
所以说在 TypeScript 里面实际上指的是这种静态类型。实际上 ts 里面 b 应该这么写
let b: number = 123;
我定义一个 number 类型的 b ,它的初始值是 123,未来 b 不能是其他类型,但是可以改变值
let b: number = 123;
b = 456;
TypeScript 不能直接在浏览器或者 Node 环境下运行,它必须通过编译器编译成普通的 JavaScript 之后再去运行,怎么理解,打开 https://www.typescriptlang.org/play/index.html。在左侧编写一些 ts 代码
ts
interface Person { name: string } const teacher: Person = { name: 'zhang san' }
js
"use strict"; const teacher = { name: 'zhang san' };