typescript 基础
作用
- 方便开发,如果有类型错误,编译的时候就会抛出错误,而不是一直不知道
类型
类型声明
ts 可以根据上下文自动指定类型
·let num = 123 // number
也可以显式声明类型let str:string
= ‘abc’
基本类型
boolean、string、number、array、null、object 等与js类似
类数组类型
- tuple 元组类型 固定类型和长度的数组
let person1: [number, string] = [1, 'holiday']
- enum 枚举类型
enum Color {
red,
green,
blue
}
console.log(Color.green) // 1
空类型组
- undefined
- void 不存在,多用于函数没有return
- never 多用于抛出异常的函数
灵活类型
- any 指的是匹配任何类型
- unkonwn 类型未定时候使用 unknown 类型会比 any 更加安全。这个安全体现在,虽然它和 any 一样存储了任意类型的值,但是具体使用的时候,这个类型需要显式确定,由使用者进行指定将 unknown 转换成某一确定类型。
高级类型
union 组合类型 //let union:string | number
Nullable 可空类型
Literal 字面量类型 // const num = 3; let lit: 1|3|‘mit’|true
接口和类
interface 关键字定义一个接口,目的是规范一个类的属性和方法,Java等后台语言中经常使用
例如:我们定义一个Ipoint接口
interface IPoint {
x: number
y: number
getDistance: (p: IPoint) => number
}
关于类,es6+已有充分的表述, 为实现上述接口定义的类
class Point implements IPoint {
x: number
y: number
getDistance = (p:IPoint) => {
return this.x-this.y
}
}
Acess Modifier 访问修饰符
public private protected
- public 修饰的属性或方法是公有的,可以在任何地方被访问到,默认所有的属性和方法都是 public 的
- private 修饰的属性或方法是私有的,不能在声明它的类的外部访问
- protected 修饰的属性或方法是受保护的,它和 private 类似,区别是它在子类中也是允许被访问的
如果要想访问private 修饰的私有属性,需要在类的内部定义get和set方法,ts 语法糖, set/get + 空格 + 方法名,可以作为对外暴露的变量使用
class Point {
private x:number
get X() {
return this.x
}
set Y(x:number) {
this.x = x
}
}
let point = new Point()
point.X = 2
point.X // 2
Generics 泛型
Generics 泛型 指的是在数组中规定类型,函数传参中适配类型
let arr: Array<number> = [1,2,3,4]
let arr: number[] = [1,2,3,4] // 同上
let lastInArray = <T>(arr: T[]) => { // T 表示传一个类型过来,T约定俗成 表示无论传来什么值都能适配
return arr[arr.length - 1]
}
const l1 = lastInArray([1,2,3,4])
const l2 = lastInArray(['a','b', 'c', 'd',1]) // 隐式声明
const l3 = lastInArray<number | string>(['a','b', 'c', 'd',1]) // 显式声明
// 用于传参适配
function add1<T, Y>(a: T, b: Y ) {
return [a, b]
}
let r1 = add1(1, 2)
let r2 = add1<number, string>(1, 'ddsd')