ts语法(六)

110 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情

函数的重载

在TypeScript中,如果我们想编写了一个函数,希望可以对字符串和数字类型进行相加,我们可能会这样来编写,但是其实是错误的:

function sum(a: number | string, b: number | string): number | string {
    return a + b
}

在TypeScript中,我们可以去编写不同的重载签名来表示函数可以以不同的方式进行调用;一般是编写两个或者以上的重载签名,再去编写一个通用的函数以及实现;

function sum(a: number, b: number): number;
function sum(a: string, b: string): string;
function sum(a: any, b: any): any {
    return a + b
}
// 在调用sum的时,会根据传入的参数类型来决定执行哪一个函数的重载签名
console.log(sum(1, 2));
console.log(sum("zhang", "san"));

认识类的使用

  • 在早期的JavaScript开发中我们需要通过函数和原型链来实现类和继承,从ES6开始,引入了class关键字,可以更加方便的定义和使用类。
  • TypeScript作为JavaScript的超集,也是支持使用class关键字的,并且还可以对类的属性和方法等进行静态类型检测。
  • 实际上在JavaScript的开发过程中,我们更加习惯于函数式编程: 比如React开发中,目前更多使用的函数组件以及结合Hook的开发模式;比如在Vue3开发中,目前也更加推崇使用 Composition API;
  • 但是在封装某些业务的时候,类具有更强大封装性,所以我们也需要掌握它们。
  • 类的定义我们通常会使用class关键字:在面向对象的世界里,任何事物都可以使用类的结构来描述;类中包含特有的属性和方法;

类的定义

使用class关键字来定义一个类;我们可以声明一些类的属性:在类的内部声明类的属性以及对应的类型。如果类型没有声明,那么它们默认是any的;我们也可以给属性设置初始化值;在默认的strictPropertyInitialization模式下面我们的属性是必须初始化的,如果没有初始化,那么编译时就会报错;如果我们在trictPropertyInitialization模式下确实不希望给属性初始化,可以使用 name!: string语法;类可以有自己的构造函数constructor,当我们通过new关键字创建一个实例时,构造函数会被调用;构造函数不需要返回任何值,默认返回当前创建出来的实例;类中可以有自己的函数,定义的函数称之为方法;

class Person {
    name!: String
    age: number

    constructor(name: String, age: number) {
      this.name = name
      this.age = age
    }

    fn() {
      console.log(this.name)
    }
    fn2() {
      console.log(this.age)
    }
}