Skip to content

其它

生成 ts 配置文件

shell
tsc --init

在 ts 中定义类

ts
class User {
  name: string
  age: number
  constructor(n: string, a: number) {
    this.name = n
    this.age = a
  }
  info(): string {
    return `${this.name} 的年龄是 ${this.age}`
  }
}

const user: User = new User('张三', 12)

console.log(user.info())

public 修饰符

public 修饰符可以定义某些变量是公开的,那上面的例子来举例:

ts
class User {
  public name: string
  public age: number
  constructor(n: string, a: number) {
    this.name = n
    this.age = a
  }
  public info(): string {
    return `${this.name} 的年龄是 ${this.age}`
  }
}

const user: User = new User('张三', 12)

console.log(user.name) // 张三
console.log(user.age) // 12
console.log(user.info) // [Function: info]

protected 修饰符

protected 是受保护的数据类型,就只能在类的内部进行使用,在类的外部不能进行方法。

但是可以通过类的继承进行访问

ts
class User {
  protected name: string
  protected age: number
  constructor(n: string, a: number) {
    this.name = n
    this.age = a
  }
  protected info(): string {
    return `${this.name} 的年龄是 ${this.age}`
  }
}

// console.log(user.name) 不能访问

private

private 修饰符仅限于当前构造函数使用,就算是继承的类也不能进行使用

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

class Admin extends User {
  constructor(name) {
    super(name)
    // console.log(this.name) // 不能访问
  }
}

readonly

readonly 修饰的熟悉是不能更改的,也就是说这个熟悉是只读的

ts
class Axios {
  readonly url: string = 'www.baidu.con'
}

const axios = new Axios()
console.log(axios.url)

// axios.url = 'http://localhost' // 不能进行更改

但也不一定是绝对不能更改的,比如下面例子,类在初始化的时候,也是可以进行更改的

ts
class Axios {
  readonly url: string = 'www.baidu.con'
  public constructor(url) {
    this.url = url
  }
}

const axios = new Axios('github.com')
console.log(axios.url)

static

static 方法可以定义静态熟悉和方法,只能在类中进行访问

和原生是一样的

ts
class User {
  static url: string = 'baidu.com'
}

const user = new User()

// console.log(user.url) // 获取不到

console.log(User.url)

单例模式

单利模式中,希望无论调用多少次的构造函数,它只执行一次,这样可以节约资源

ts
class Axios {
  private static instance: Axios | null = null
  private constructor() {}

  static mark() {
    if (Axios.instance === null) {
      console.log('创建实例')

      Axios.instance = new Axios()
    }
    return Axios.instance
  }
}

Axios.mark()
Axios.mark()
Axios.mark()
Axios.mark()
Axios.mark()
// 创建实例

get 和 set

ts
class Article {
  private _article: any[] = []

  public get article(): any[] {
    return this._article
  }

  public set article(list: any[]) {
    this._article = list
  }
}

const art = new Article()
console.log(art.article)

art.article = [{ title: 'hello', name: 'http权威指南' }]
console.log(art.article)