TypeScript
简称:TS,是 JavaScript 的超集,简单来说就是:JS 有的 TS 都有。从编程语言的动静来区分,TypeScript 属于静态类型的编程语言,JavaScript 属于动态类型的编程语言,TS在编译期做类型检查,而JS是在执行期做类型检查,在这一点上来说,TS能更早的发现错误,这样可以减少我们查找、修改bug的时间。
使用TS需要编译器,因为浏览器不认识TS,需要工具将TS转化为JS
安装命令:npm i -g typescript
或者 yarn global add typescript
验证是否安装成功:tsc –v
原始数据类型:number / string / boolean / null / undefined
// number
let a:number = 10
// boolean
let b:boolean = false
// string
let c:string = '1234'
const d:undefined = undefined
console.log(d)
const e:null = null
console.log(e)
其中,undefined
和 null
是所有类型的子类型,也就是说 undefined
/ null 类型的变量,可以赋值给 number
类型的变量,而 void
类型的变量不能赋值给 number
类型的变量
let n:string = null/undefined
空值:在 TypeScript 中,可以用 void
表示没有任何返回值的函数
// void 空值,表示没有任何返回值的函数
function fn1():void {
console.log(123456)
}
console.log(fn1())
任意值:any
// any 任何类型
let h:any = 123
h = null
h = undefined
h = []
h = new String()
h = String
console.log(h)
let newARR:any[]=[,2,3,'',true]
console.log(newARR)
数组:有两种写法
// Array
let arr:number[] = [1, 2, 3]
arr = [4, 5, 6]
console.log(arr)
const arr1:Array<number> = [7, 8, 9]
console.log(arr1)
对象
let obj:object = {}
类型推论:TS会在没有明确的指定类型的时候推测出一个类型
let g;
联合类型:表示取值可以为多种类型中的一种
注意:当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法
接口:它是对行为的抽象,用于对「对象的形状(Shape)」进行描述,简单理解为一种约束
// 定义接口
interface IPerson{
id:number,
name: string,
age: number,
}
let p:IPerson={
id: 123321,
name: 'tom',
age: 19,
}
console.log(p)
可以看到,p与IPerson的变量和变量的类型是一致的,因为我们约束了p的形状必须和接口IPerson一致,定义的变量比接口少了一些、多了一些属性是不允许的,会报错。
接口-可选属性:有时不想完全匹配一个形状,这时候可以使用可选属性,在定义的属性名后面机上?即可,这样在调用接口是不定义sex属性也不会报错。
sex?: string
但是这时候仍然不允许添加未定义的属性,比如接口里只有A、B、C三种属性,定义对象T时,T里面多出了个D属性,会直接报错。
接口-任意属性:有时想要一个任意属性在接口里,可以这么定义
[propName:string]:any
使用 [propName: string] 定义了任意属性取 string 类型的值,需要注意的是,一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集,例如定义[propName:string]:string, 确定属性和可选属性只能定义为string的子集。
一个接口中只能定义一个任意属性。如果接口中有多个类型