TypeScript(四)
2021-05-25 本文已影响0人
Joemoninni
六.模块(命名空间、模块)
-
内部模块称为命名空间;注意:命名空间里面的变量是私有的,在外部使用的话需要通过export 暴露出去
namespace A {}
-
外部模块称为模块(export、import)
七. 装饰器
-
类装饰器: 在不修改原来的类的前提下,来拓展类的功能,还能修改类的构造函数
-
普通装饰器(无法传参)
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()
-