TypeSctipt笔记

79 阅读1分钟

一、类型

  1. number
  2. string
  3. boolean
  4. 字面量
  5. ang
  6. unknown
  7. void
  8. never
  9. object
  10. array
  11. tuple (元素,ts新增类型,固定长度数组)
  12. enum(枚举,ts中新增类型)

二、属性的封装

  1. public 公用的,可以在类外访问和修改
  2. private 私有的,只能在当前类内访问和修改
  3. 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")