前言
TypeScript已经成为前端必备技能了,以下是TypeScript的优势
- 静态类型检查:TypeScript是JavaScript的超集,它引入了静态类型检查,可以在编译时发现类型错误,减少在运行时出现的错误。这可以提高代码的可靠性和维护性。
- 更好的开发工具支持:TypeScript提供了更好的开发工具支持,如代码自动补全、代码导航、重构和调试等功能。这些工具可以提高开发效率,并减少调试和排错的时间。
- 更好的代码组织和重用:TypeScript支持面向对象的编程风格,可以使用类、接口、模块等概念来组织和重用代码。这有助于提高代码的可读性、可维护性和可扩展性。
- 更好的团队协作:TypeScript的静态类型检查可以帮助团队成员更好地理解和使用代码,减少因为类型错误导致的沟通和协作问题。此外,TypeScript还支持定义类型声明文件,可以提供给其他团队成员使用,减少对代码的依赖和理解成本。
- 兼容性和迁移性:TypeScript兼容JavaScript的语法和库,可以无缝地集成到现有的JavaScript项目中。此外,TypeScript还提供了一些工具和指南,可以帮助开发者将现有的JavaScript代码逐步迁移到TypeScript。
开始使用TypeScript
在项目中安装TypeScript
在TypeScript官网打开演练场
TypeScript官网
类型推断
1 2 3 4
| let str = 'abc' str = 10
|
类型注解
1
| let str:string = 'abc' || let str:string str = 'abc'
|
类型断言
1 2 3 4 5 6 7 8 9 10 11
| let numArr = [1,2,3]
const result = numArr.find(item => 2) result * 5
let numArr = [1,2,3] const result = numArr.find(item => 2) as number result * 5
|
基础类型和联合类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| let v1: string = 'abc' let v2:number = 10 let v3:boolean = true let nu:null = null let un:undefined = undefined
let v4:string | null = null
let v5: 1 | 2 | 3 = 5
let v5: 1 | 2 | 3 = 2
|
数组、元组、枚举
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
let arr:number[] = [1,2,3,'a']
let arr:number[] = [1,2,3]
let arr1: Array<string> = ['a','b','c']
let t1:[number,string,number] = [1,'a',2]
t1[0] = 'a'
let t1:[number,string,number?] = [1,'a']
enum MyEnum { A, B, C }
console.log(MyEnum.A) console.log(MyEnum[0])
|
函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| function myfn(a:number,b:string):void { console.log(a+b) }
function myfn(a:number,b?:string):void { if(b) { console.log(a+b) } else { console.log(a) } }
function myfn(a:number = 10,b:string,c?:boolean,...rest:number[]):void { console.log(a+b) }
myfn(5,6,7,1,2,3)
myfn(5,'6',true,1,2,3)
|
接口
1 2 3 4 5 6 7 8 9 10
| interface Obj { name:string, age:number } const obj:Obj = { name:'a', age:10 }
|
类型别名
1 2 3 4 5 6 7 8 9
| let a: string | number = 10 let b: string | number = 20 let c: string | number = 'abc'
type MyUserName = string | number let a: MyUserName = 10 let b: MyUserName = 20 let c: MyUserName = 'abc'
|
泛型
1 2 3 4 5 6 7 8 9
| function myFn(a:number,b:number):number[] { return [a,b] }
function myFn<T>(a:T,b:T):T[] { return [a,b] } myFn<number>(1,2) myFn<string>('a','b') || myFn('a','b')
|