1.配置属性初始化检查
{
"compilerOptions": {
"strictPropertyInitialization": true // 类定义的时候,如果声明了类型,constructor里面一定要初始化,不然会报错
}
class Test {
// 声明了但是没有初始化
name: string
age: number
gender: '男' | '女'
constructor() { }
}
2.定义一个类
使用ts定义类时,必须声明类有哪些属性,否则会报错
属性可以声明为只读、也可以设置默认值
class Test {
// 声明有哪些属性
name: string
age: number
// 设置了默认值后,constructor里可以不用写
gender: '男' | '女' = '男'
readonly id: string = ''
constructor(name: string, age: number,) {
this.name = name;
this.age = age;
}
}
3.访问修饰符
public默认值,表示公有的,即类的内部和类的外部都可以使用private表示私有的,只在类的内部可以访问protected表示受保护的,在类的内部和派生类中可以访问,但在类的外部不可访问- 这些访问修饰符不仅可以修饰属性,也可以修饰方法
class Test {
// 声明有哪些属性
name: string
age: number
// 设置了默认值后,constructor里可以不用写
gender: '男' | '女' = '男'
// 仅内部可以访问这个属性
private readonly id: string = ''
constructor(name: string, age: number,) {
this.name = name;
this.age = age;
}
public getName(): void {
console.log(this.name);
}
private hasProperty(): void { }
}
4.属性简写
如果某个属性,通过构造函数传参,并且不做任何处理就直接赋值给该属性,可以进行简写
class Test {
gender: '男' | '女' = '男'
private readonly id: string = ''
// 通过形参设置 访问修饰符 后,可以省略上面的类型声明
constructor(public name: string, private age: number,) {}
}
5.访问器
当我们设置的属性需要符合一定的规则的时,可以使用访问器来设置
有点类似vue中的计算属性
class Test {
private _age: number = 0
constructor(public name: string) { }
set age(val: number) {
if (val > 10) {
this._age = 10
} else if (val < 0) {
this._age = 0
} else {
this._age = val
}
}
get age(): number {
return Math.floor(this._age)
}
}
const test: Test = new Test('张三')
// 设置值时,会自动调用set方法
test.age = 20
// 获取值时,会自动调用get方法
console.log(test.age);