【前端vue3】TypeScrip-Class类用法

类型声明

TypeScrip定义Class类
语法:

// 定义一个名为 Person 的类
class Person {
    constructor () {
        // 构造函数:稍后定义
    }

    run () {
        // 方法:稍后定义
    }
}

在TypeScript是不允许直接在constructor 定义变量的 需要在constructor上面先声明
例如:

class Person{
    constructor(name:string,age:number){
        this.name = name;
    }
    run(){

    }
}

以上代码提示出现错误:类型“Person”上不存在属性“name”。

在这里插入图片描述

在constructor上面声明后错误就消失了

class Person{
    name: string
    age: number
    constructor(name:string,age?:number){
        this.name = name;
    }
    run(){

    }
}

在这里插入图片描述

这样引发了第二个问题你如果了定义了变量不用 也会报错 通常是给个默认值 或者 进行赋值
例如:

class Person{
    name: string
    age: number
    constructor(name:string,age:number){
        this.name = name
    }
    run(){

    }
}

在这里插入图片描述

给age给默认值或者赋值

class Person{
    name: string
    age: number = 0 //给默认值
    constructor(name:string,age:number){
        this.name = name
    }
    run(){

    }
}
class Person{
    name: string
    age: number
    constructor(name:string,age:number){
        this.name = name,
        this.age = age  //赋值
    }
    run(){

    }
}

类的修饰符

总共有三个:public private protected

public

public修饰符的使用:

使用public 修饰符 可以让你定义的变量 内部访问 也可以外部访问 如果不写默认就是public

class Person{
    public name: string
    age: number
    constructor(name:string,age:number){
        this.name = name,
        this.age = age
    }
    run(){

    }
}
let xiaoc =new Person("小C学安全",123);
xiaoc.name //name参数是可以直接调用的

private

使用 private 修饰符 代表定义的变量私有的只能在内部访问 不能在外部访问

class Person{
    public name: string
    private age: number
    constructor(name:string,age:number){
        this.name = name,
        this.age = age
    }
    run(){

    }
}
let xiaoc =new Person("小C学安全",123);
xiaoc.name
xiaoc.age // 属性“age”为私有属性,只能在类“Person”中访问。ts(2341)

在这里插入图片描述

protected

使用 protected 修饰符 代表定义的变量私有的只能在内部和继承的子类中访问 不能在外部访问

class Person{
    public name: string
    private age: number
    protected sex: string
    constructor(name:string,age:number,sex:string){
        this.name = name,
        this.age = age,
        this.sex = sex
    }
    run(){

    }
}
let xiaoc =new Person("小C学安全",123,"男");
xiaoc.name
xiaoc.age
xiaoc.sex //属性“sex”受保护,只能在类“Person”及其子类中访问。ts(2445)

在这里插入图片描述

静态属性和静态方法

用static 定义的属性 不可以通过this 去访问 只能通过类名去调用

class Person{
    public name: string
    private age: number
    protected sex: string
    static height: number
    constructor(name:string,age:number,sex:string){
        this.name = name,
        this.age = age,
        this.sex = sex
        this.height  //属性“height”在类型“Person”上不存在。你的意思是改为访问静态成员“Person.height”吗?ts(2576)

    }
    run(){

    }
}
let xiaoc =new Person("小C学安全",123,"男");
xiaoc.name

通过类名去调用

class Person{
    public name: string
    private age: number
    protected sex: string
    static height: number =180
    constructor(name:string,age:number,sex:string){
        this.name = name,
        this.age = age,
        this.sex = sex
        // this.height
    }
    run(){

    }
}
let xiaoc =new Person("小C学安全",123,"男");
xiaoc.name
console.log(Person.height);

在这里插入图片描述
atic 静态函数 同样也是不能通过this 去调用 也是通过类名去调用

class Person{
    public name: string
    private age: number
    protected sex: string
    static height: number =180
    constructor(name:string,age:number,sex:string){
        this.name = name,
        this.age = age,
        this.sex = sex
        // this.height
    }
    static run(){
        return console.log(this.name);
        
    }
}
let xiaoc =new Person("小C学安全",123,"男");
xiaoc.name
console.log(Person.height);

Person.run()

需注意: 如果两个函数都是static 静态的是可以通过this互相调用

interface定义类

// 定义一个接口 PersonA,包含一个方法 get,接受一个参数 name,返回一个字符串
interface PersonA {
    get(name: string): string;
}

// 定义一个接口 PersonB,包含一个方法 set,无参数,无返回值,以及一个属性 sex,类型为字符串
interface PersonB {
    set(): void;
    sex: string;
}

// 定义一个类 PersonAClass
class PersonAClass {
    name: string; // 属性 name,类型为字符串

    constructor() {
        this.name = "小C学安全"; // 构造函数中初始化 name 属性为 "小C学安全"
    }
}

// 定义一个类 PersonbClass,继承自 PersonAClass,并实现了 PersonA 和 PersonB 接口
class PersonbClass extends PersonAClass implements PersonA, PersonB {
    sex: string; // 属性 sex,类型为字符串

    constructor() {
        super(); // 调用父类 PersonAClass 的构造函数
        this.sex = "男"; // 构造函数中初始化 sex 属性为 "男"
    }

    // 实现接口 PersonA 中的方法 get
    get(name: string): string {
        return "小白"; // 返回固定字符串 "小白"
    }

    // 实现接口 PersonB 中的方法 set
    set() {
        // 空方法体,不执行任何操作
    }
}
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值