一、类型
- number
- string
- boolean
- 字面量
- ang
- unknown
- void
- never
- object
- array
- tuple (元素,ts新增类型,固定长度数组)
- enum(枚举,ts中新增类型)
二、属性的封装
- public 公用的,可以在类外访问和修改
- private 私有的,只能在当前类内访问和修改
- protected 受保护的,只能在当前类和子类里访问
class Person {
public _name: string
private _age: number
constructor(name: string, age: number) {
this._name = name
this._age = age
}
/**
* getter用来获取属性
* setter用来设置属性
* -他们被称为属性的存取器
*/
getName(): string {
return this._name
}
setName(name:string){
this._name = name
}
getAge(): number {
return this._age
}
setAge(age:number){
// 判断年龄是否合法
if(age >= 0) {
this._age = age
} else {
console.error("Age must be greater than 0")
}
}
// ts中设置getter方法的方式
get name(){
return this._name
}
set name(value:string){
this._name = value
}
get age(){
return this._age
}
set age(value:number){
if(value >= 0) {
this._age = value
} else {
console.error("Age must be greater than 0")
}
}
}
const per = new Person('猪八戒', 18);
console.log(per.getName());
console.log(per.name)
语法糖
class Person {
constructor(public name: string, private age: number) {
}
}
const per = new Person('孙悟空',20)
三、泛型
在定义函数和类时,如果遇到类型不明确时就可以使用泛型
function fn<T>(a:T):T {
return a
}
// 可以直接调用具有泛型的函数
fn(10)
// 手动指定泛型
fn<string>('hellow')
// 泛型可以指定多个
function fn2<T,K>(a:T, b:K):T {
console.log(b)
return a
}
fn2<number,string>(15,'hello')
// 泛型T必须是inter的实现类
interface inter {
length:number
}
function fn3<T extends inter>(a:T):number {
return a.length
}
fn3("123")