TypeScript 是 JavaScript 的语法超集,它添加了静态类型,近几年的发展中,也受到诸多开发者的喜爱。Typescript 的社区逐渐壮大,日趋完善,为越来越多前端开发者提供服务。
JS vs. TS
JS:
动态类型,在执行阶段才能确定类型的匹配
js的特征是它是一个脚本语言,在执行过程中浏览器引擎才会进行类型的匹配,如果在写代码的过程中写了一个不正确的类型,运行时会报错。
TS:
静态类型,类型操作发生在执行前,编译的时候。
两者都是弱类型语言,会进行隐式类型转换。
为什么是typescript?
typescript兼容javascript,在编译时就能进行类型检查,减少错误的排查代价。
官网有在线编译器
基础数据类型
在声明后加上冒号和关键字
let str: string = "jimmy";
let num: number = 24;
let bool: boolean = false;
let u: undefined = undefined;
let n: null = null;
let obj: object = {x: 1};
let big: bigint = 100n;
let sym: symbol = Symbol("me");
接口
接口的作用是为类型命名和为你的代码或第三方代码定义契约。
- 可选属性:接口里面并不是所有属性都是必须的,如果有的属性你不确定其会不会存在,可以设置成可选属性color?: string; 。
- 只读属性:有的属性需要不被修改,可以设置只读属性readonly。
- 额外的属性检查
- 函数类型:函数类型的接口定义可以定义函数的参数和返回值
interface SearchFunc { (source: string, subString: string): boolean; }
泛型
泛型(Generics)是 TypeScript 中一个重要的概念,它允许你在编写可重用、灵活的函数、类或接口时,参数或返回值的类型变成一个占位符。TypeScript中泛型的定义:在定义函数时,不决定函数的参数类型,而是让调用者以参数的形式告知,函数的参数应该是什么样的类型。
function identity<T>(arg: T): T { return arg; }
我们把这个版本的identity函数叫做泛型,因为它可以适用于多个类型。 这个T允许我们捕获调用者提供的类型,使得接下来可以使用这个类型,可以看到,返回值也使用了这个类型。这就是泛型。函数的参数和返回值的类型不是固定的,而是由函数的调用者决定的。