美文网首页
TypeScript(四)

TypeScript(四)

作者: Joemoninni | 来源:发表于2021-05-25 15:59 被阅读0次

六.模块(命名空间、模块)

  1. 内部模块称为命名空间;注意:命名空间里面的变量是私有的,在外部使用的话需要通过export 暴露出去

    namespace A {}
    
  2. 外部模块称为模块(export、import)

七. 装饰器

  1. 类装饰器: 在不修改原来的类的前提下,来拓展类的功能,还能修改类的构造函数

    • 普通装饰器(无法传参)

      function logClass(params: any) {
          console.log(params)
          // params就是当前类
          params.prototype.apiUrl = 'www.xxx.com' // 动态扩展的属性
          params.prototype.run = function() {
              console.log('run')
          }
      }
      @logClass // 调用装饰器
      class HttpClient {
          constructor() {}
          getData() {}
      }
      let http: any = new HttpClient() 
      console.log(http.apiUrl)
      http.run()
      
    • 装饰器工厂(可传参)

      function logClass(params: string) {
          // 这里需要返回一个函数,传入参数target,target就是当前类
          return function(target: any) {
              target.prototype.apiUrl = params;
          }
      }
      @logClass('www.yyy.com') // 调用装饰器,这里必须传参
      class HttpClient {
          constructor() {}
          getData() {}
      }
      let http: any = new HttpClient()
      console.log(http.apiUrl)
      
    • 类装饰器例子:通过类装饰器来修改构造函数里的属性和方法

      function logClass(target: any) {
          console.log(target) // target是当前类
          
          return class extends target {
              apiUrl: any = '我是修改后的数据'
              getData() {
                  this.apiUrl = this.apiUrl + '-------'
                  console.log(this.apiUrl)
              }
          }
      }
      
      @logClass // 调用装饰器
      class HttpClient {
          public apiUrl: string | undefined
          constructor() {
              this.apiUrl = '我是构造函数里面的apiUrl'
          }
          getData() {
              console.log(this.apiUrl)
          }
      }
      let http = new HttpClient()
      http.getData()
      

相关文章

网友评论

      本文标题:TypeScript(四)

      本文链接:https://www.haomeiwen.com/subject/oxhcsltx.html