一.属性的封装
- TS可以在属性前添加属性的修饰符
public
修饰的属性可以在任意位置访问,为默认值private
私有属性,私有属性只能在类的内部进行访问(修改),通过在类中添加get
和set
方法,使得私有属性可以在外部访问protected
受保护的类,只能在当前类及其子类中访问
get和set方法
class Person{
private _name: string;
private _age: number;
get name(){ // get方法
return this._name
}
set name(value:string){ // set方法
this._name = value
}
}
const per = new Person()
per.name 执行get方法直接获取this._name属性值
per.name = '小四' 执行set方法更改this._name的值
二.构造函数的简写
class C{
name:string;
age:number;
constructor(name:string,age:number){
this.name = name;
this.age = age
}
}
等价于
class C{
constructor(public name:string, public age:number)
}
- 可以直接将属性定义在构造函数中
三.泛型
- 在定义函数或类时,如果遇到类型不明确就可以使用泛型
function fn<T>(a:T):T{
return a
}
- 可以直接调用具有泛型的函数
不指定泛型,TS可以自动对类型进行推断
let result = fn(123)
指定泛型
let result = fn<string>('hello')
- 泛型可以同时指定多个
function fn<T,K>(a:T,b:K):T{
return a
}
fn<number,string>(123,'hello')
T extends Inter
表示泛型T必须是Inter的实现类(子类)
Interface Inter{
length:number
}
function fn3<T extends Inter>(a:T):number{
return a.length
}
- 泛型在类中的实现
class myClass<T>{
name:T;
constructor(name:T){
this.name = name
}
}
const mc = new myClass<string>('小四')