属性封装
在类定义的过程中,为了保证特殊数据的安全性通常会使用private,protected这两类修饰符对属性进行保护,从而也有属性的封装确保在子类型访问或修改private类型的属性值。
属性的修饰符
修饰符 | 作用 |
---|---|
private(私有属性) | 属性只能在类内部进行修改/访问 |
public(公共属性(默认值)) | 属性只能在类内部进行修改/访问 |
protected(受保护类型属性) | 属性只能在当前类和当前类的子类中访问 |
tips: public类型属性 此文不作赘述
private 属性类型 Eg
- private关闭了该属性的外部访问方式
class person {
// ts中在属性前添加修饰符
name:string;
private age:number;
constructor(name:string,age:number){
this.name=name;
this.age=age
}
}
const person1=new person('liy',21)
console.log(per.age)//error 属性“age”为私有属性,只能在类“person”中访问
per.age=18 // error 属性“age”为私有属性,只能在类“person”中访问
**private关闭了该属性的外部访问方式**
- 使用属性封装 (通过setter方法修改属性 ,getter属性存储器)使用set getter保证属性更安全
class person {
// ts中在属性前添加修饰符
name:string;
private age:number;
constructor(name:string,age:number){
this.name=name;
this.age=age
}
// 定义一个方法获取age
getAge(){
return this.age
}
//定义set方法
setAge(val:number){
// 判断age是否合理 避免数据变得不安全
val>=0? this.age=val:''
}
}
protected 属性类型 Eg
protected受保护的属性只能在当前类和当前类的子类中访问
// protected受保护的属性只能在当前类和当前类的子类中访问
class A{
constructor(public name:string,protected number:number){}
}
class B extends A{
test(){
console.log(this.number)
}
}
泛型
泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。通常在定义函数或类时,遇到类型不明确的情况下使用
// k表示一个类型
// 只在函数执行时确定 ts使用类型推断
function fn1<K>(a:K):K{
return a
}
// 指定泛型类型
let result = fn1<string>('hello');
//类型推断泛型类型
let result1 = fn1(10);
- 可同时定义多个泛型
// 可同时制定多个 function fn3<t,k>(a:t,b:k):t{ return a }
- 可指定泛型类属于固定的几种类型
interface face{
length:'number'
}
function fn4< T extends face>(a:T):T{
return a
}