TypeScript 构造函数怎么用

你可能在写 JavaScript 代码时,经常遇到这种情况:明明定义了一个函数,不小心漏了 new 关键字,结果 this 指向了全局,各种莫名其妙的错误就出来了。如果用 TypeScript 写,就能提前帮你避开大部分这类坑。而构造函数就是 TypeScript 里帮你规范对象创建、减少出错的核心工具之一,咱们用生活里的例子一步步说清楚怎么用。

先搞懂:构造函数到底是啥?

你可以把构造函数想象成“对象的专属模板”。比如你想做一批定制款的笔记本,每本都有固定的封面图案、内页纸张、品牌logo,还有可以自己填的姓名栏,那这个“笔记本模板”就是构造函数,你每填一次信息,就能生成一本不一样的专属笔记本。

TypeScript 构造函数怎么用

用 TypeScript 写这个模板,比纯 JS 更严谨,能提前帮你检查填的信息合不合规,比如姓名栏能不能填数字、纸张能不能用不存在的款式。

基础用法:写一个简单的构造函数

先从最基础的例子来,咱们做一个“学生信息模板”,要求每个学生都有姓名、年级两个固定信息,还能说“我是几年级的XX”。

`typescript

// 构造函数名一般首字母大写,是约定俗成的规范

class Student {

// 定义这个模板必须有的属性

name: string;

grade: number;

// constructor就是构造函数的核心,每次生成新对象就会自动执行这里

constructor(name: string, grade: number) {

// 把外面传进来的信息,对应存到模板的属性里

this.name = name;

this.grade = grade;

}

// 给模板加一个方法,让学生能自我介绍

introduce(): string {

return 我是${this.name},今年上${this.grade}年级;

}

}

// 用这个构造函数生成具体的学生,就像用模板做笔记本

const xiaoming = new Student('小明', 3);

console.log(xiaoming.introduce()); // 输出:我是小明,今年上3年级

`

你看,每次生成学生都要用 new,TypeScript 会帮你检查:如果漏了年级、或者把年级写成“三年级”(字符串),它会直接报红,不用等代码跑起来才发现错误。

进阶技巧:简化属性写法

刚才的构造函数里,要先写属性声明,再在 constructor 里赋值,有点麻烦。其实 TypeScript 有个简化写法,只要在 constructor 参数前加修饰符(public/private/protected),就能自动生成属性,不用单独声明:

`typescript

class Student {

// 直接在constructor参数前加public,TypeScript自动生成name和grade属性

constructor(public name: string, public grade: number) {}

introduce(): string {

return 我是${this.name},今年上${this.grade}年级;

}

}

const xiaohong = new Student('小红', 5);

console.log(xiaohong.introduce()); // 输出:我是小红,今年上5年级

`

是不是清爽多了?这个简化写法是 TypeScript 专属的,能少写不少重复代码,还不容易出错。

避坑提醒:别踩这些常见错误

很多新手用构造函数时容易犯3个错,咱们用例子说清楚怎么避开:

  • 漏写new关键字:如果直接写 const xiaogang = Student('小刚', 4),TypeScript 会报错,因为只有加 new 才是调用构造函数生成对象,不加的话 this 会指向全局,在浏览器里就是 window,最后得到一个没用的 undefined。
  • 参数类型不匹配:如果写 const xiaoqiang = new Student(123, '四年级'),TypeScript 会直接提示错误,因为 name 要求是字符串、grade 要求是数字,这样能提前挡住输入错误。
  • 给只读属性赋值:如果想让某个属性生成后不能改,比如学生的学号,就加 readonly 修饰:constructor(public readonly id: string, ...),之后再写 xiaoming.id = '002' 时,TypeScript 会报错,防止不小心修改关键信息。

其实 TypeScript 的构造函数,本质就是帮你把“创建对象的规则”定死,不用每次写对象都重复定义属性和方法,还能提前发现代码里的类型错误,不管是写小工具还是大项目,用起来都能省不少麻烦。

上一篇 Swift编程语言核心特性与日常开发实用技巧科普