一、什么是参数属性?
参数属性是一种简洁的语法,是TypeScript独特的语法糖,它允许你在构造函数的参数列表中,通过添加访问修饰符(public
, private
, protected
)或 readonly
关键字,来一次性完成属性的声明和初始化。
示例:
class User {
constructor(public name: string, private age: number, readonly id: number) {
// 构造函数体可以是空的,因为声明和赋值已经自动完成了!
// TypeScript 在幕后为你做了三件事:
// 1. 声明了一个 public 的 name 属性。
// 2. 声明了一个 private 的 age 属性。
// 3. 声明了一个 readonly 的 id 属性。
// 4. 自动完成了 this.name = name, this.age = age, this.id = id。
}
public getAge(): number {
return this.age; // age 是 private 的,但可以在类内部访问
}
}
const user = new User('Alice', 30, 123);
console.log(user.name); // "Alice" (public, 可访问)
// console.log(user.age); // Error: 属性'age'是私有的,只能在类'User'中访问。
console.log(user.getAge()); // 30 (通过公共方法访问)
console.log(user.id); // 123 (readonly, 可访问但不可修改)
// user.id = 456; // Error: 无法分配到 'id' ,因为它是只读属性。
二、参数属性的规则与组合
参数属性不仅仅是 private
的专利,它可以与所有访问修饰符以及 readonly
组合使用:
public
:成员在任何地方都可见。(如果省略修饰符,参数默认不会成为属性)。private
:成员只能在声明它的类的内部访问。protected
:成员可以在声明它的类及其子类的内部访问。readonly
:成员在初始化后不能被再次赋值,有助于创建不可变(immutable)对象。
你可以自由组合它们(readonly
通常与访问修饰符一起使用)。
总结
如果你喜欢本教程,记得点赞+收藏!关注我获取更多JavaScript/TypeScript开发干货