携手创作,共同成长!这是我参与「掘金日新计划 · 8月更文挑战」的第1天,点击查看活动详情
前言
TypeScript是微软开发,并且开源的编程语言,通过在JavaScript的基础上添加静态类型定义构建而成。TypeScript通过TypeScript编译器或Babel转译为JavaScript代码,可运行在任何浏览器上
TypeScript和JavaScript的区别
- ts 引入了"类"的概念
- ts引入了模块的概念,可以把声明、数据、函数和类封装在模块中
- ts增加了接口、泛型、类、类的多态、继承等
- js没有重载概念,ts有可以重载
- ts增加了 void/never/any/元组/枚举/以及一些高级类型
- js是动态编程语言,边解释边执行;ts先编译再执行,可以在编译期间发现并纠正错误
TypeScript数据类型
- any:可以赋予任意类型的值
- number,string,boolean
- array:数组类型(let arr1: number[] = [1, 2, 3] 或 let arr2: Array = [1, 2, 3])
- tuple(元组)let a: [number, string] = [1, '2'](限制类型和数量)
- object,function(参数类型:?可选参数。 = 默认参数。 ...剩余参数)
- any,unknow(类似any,unknow只能赋值给unknow类型和any类型,unknow不允许定义的值有任何操作)
- void,当一个函数,没有返回值时,ts会默认他的返回值为void类型
- never,一个函数永远不存在返回值
- enum(枚举)
接口和类型
interface(接口)和 type(类型别名)
相同:都可以给对象指定类型
不同:interface只能表示对象类型,type 能够表示非对象类型(基本类型,联合类型,元组类型)。
interface接口可以重复声明,ts会将它们合并。
interface侧重于描述数据结构,type侧重于描述类型。
扩展方式不同 interface 用 extends 来扩展,而type 用 & 操作符扩展
泛型
在定义函数、接口或类的时候,不预先指定具体的类型,使用的时候再指定类型的一种特性。
适用于:无论我们传什么类型,都能返回对应的类型
function hello <T> (val:T) : T {
return val
}
这个T就是传递的类型
// 多类型传参
function hello <T,U> (a:T, b:U): {a:T, b:U} {
const res: {a:T, b:U} = {a, b}
return res
}
泛型的其他用途
定义接口,定义类,定义一个默认参数