TS - 类

和 js 的写法有些区别,主要还是类型检查

1,属性的初始化类型检查

1,首先,属性得在属性列表中定义,才能在初始化时使用。

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

2,默认的类型检查规则 strictPropertyInitialization: true 表示,如果在属性列表中定义了,那一定得初始化。

class User {
    name: string
    // Property 'age' has no initializer and is not definitely assigned in the constructor.ts(2564)
    age: number
    constructor(name: string, age: number) {
        this.name = name
    }
}

默认值对初始化的影响

举例,如果知道默认值的话,是可以简化赋值的。

class User {
    name: string
    age: number
    gender: '男' | '女'
    constructor(name: string, age: number, gender: '男' | '女') {
        this.name = name
        this.age = age
        this.gender = gender
    }
}

const user = new User('下雪天的夏风', 18, '男')

1,如果有默认值,则 new 时不用传参。

class User {
    // ...
    constructor(name: string, age: number, gender: '男' | '女' = '男') {
        // ...
    }
}

const user = new User('下雪天的夏风', 18)

2,如果在属性列表中就设置的默认值,那也不用初始化。 new 时不用传参,使用实例时想修改了再修改。

class User {
    name: string
    age: number
    gender: '男' | '女' = '男'
    constructor(name: string, age: number) {
        this.name = name
        this.age = age
    }
}

const user = new User('下雪天的夏风', 18)

// 可修改
user.gender = '女'

2,可选和只读

class User {
    readonly id: number
    pid?: string
    // ...
    constructor(name: string, age: number) {
        this.id = Math.random()
        // ...
    }
}
// ...

可选相当于 pid: string | undefined

3,访问修饰符

用于控制类中某个成员的访问权限。

  • public 公共的(默认),所有代码都可以访问。
  • private 私有的,只能在类中访问,不能通过实例对象访问。命名一般会加下划线 _
class User {
    private _age: number;
    public gender: "男" | "女" = "男";
    constructor(_age: number) {
        this._age = _age;
    }
}

语法糖:如果一个属性,只是通过构造参数传递并直接赋值,则可简化写法。

class User {
    name: string
    constructor(name: string) {
        this.name = name
    }
}

简化写法:只要加上任意访问修饰符即可。

class User {
    constructor(public name: string) {}
}

4,访问器 set 和 get

当在赋值时需要做一些限制,可以使用访问器通过方法来赋值,js 已实现的内容

一般这种情况,也会把传递的属性变为私有,防止直接通过属性来赋值。

class User {
    constructor(private _age: number) {}

    set age(value) {
        if (value < 100 && value > 0) {
            this._age = value;
        }
    }

    get age() {
        return this._age;
    }
}

const user = new User(100);
// 调用 set 方法。
user.age = 101;

console.log("user", user);

以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下雪天的夏风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值