TypeScript的理解-程序员宅基地

技术标签: 笔记  typescript  javascript  

TypeScript

比js有更严格的类型要求

let a: number
//要求a的类型必须是number
add ():string{
    
 return 'a'
}	
//要求函数add返回的类型必须是string
let a !:number
//要求a的类型必须是非空并且是number
let a ?:number
//要求a可有可没有

这样写的好处就是在多人开发的大型项目当中可以减少类型不一致的bug

装饰器

随着 ES6 和 TypeScript 中类的引入,使得我们在多个不同类之间共享或者扩展一些方法或者行为的时候,变得并不是那么优雅。在某些场景需要在不改变原有类和类属性的基础上扩展些功能,这也是装饰器出现的原因。

装饰器接收一个参数,也就是我们被装饰的目标方法,处理完扩展的内容后再返回一个方法,供以后调用,同时也失去了对原方法对象的访问。

@testable
class MyClass {
    };

function testable(target) {
    
    target.isTestable = true;
}

console.log(MyClass.isTestable);  // true

@testable就是装饰器,修改了类的属性或者方法,这就相当于将Myclass这个类传入testable函数里。

修饰器也可以接受参数:这就等于可以修改修饰器的行为

function testable(isTestable) {
    
  return function(target) {
    
    target.isTestable = isTestable;
  }
}

@testable(true)
class MyTestableClass {
    }
MyTestableClass.isTestable // true

@testable(false)
class MyClass {
    }
MyClass.isTestable // false

装饰器也可以实现对类方法的修饰

class Person {
    
    @readonly
    // readonly(Person.prototype, 'name', descriptor);
    // 类似于
    // Object.defineProperty(Person.prototype, 'name', descriptor);
    name() {
     return `${
      this.name}` }
}

function readonly(target, key, descriptor) {
    
    // descriptor对象原来的值如下
    // {
    
    //     value: specifiedFunction,
    //     enumerable: false,
    //     configurable: true,
    //     writable: true
    // }
    decorator.writable = false;  // 不可写
    return descriptor;
}

固定写法readonly(target, key, descriptor)第一个参数是类的原型对象,第二个参数是所要修饰的属性名,第三个参数是该属性的描述对象。

有什么用?

可以在多个类中加装饰器,实现代码复用。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44364001/article/details/108809450

智能推荐

【tomcat】如何修改tomcat的默认项目-程序员宅基地

文章浏览阅读49次。我们知道,在Tomcat安装、配置、启动成功后在浏览器地址栏输入http://localhost:8080会访问到Tomcat的默认主页。然后我们打开Tomcat的webapps目录时,会发现里面有我们自己的一些项目文件夹与一个ROOT文件夹。ROOT文件是什么?如果我们做个试验,把ROOT文件夹删掉,在次输入http://localhost:8080就会发现页面一片空白,但此...

R语言期末大作业_r语言大作业-程序员宅基地

文章浏览阅读3.3w次,点赞57次,收藏599次。自选数据集对之进行相应处理一、题目要求数据分析与挖掘要求(1)按照后续分析需求,对数据进行预处理。(2)描述性统计:选择合适的方法对数据进行统计分析。包括对数值型和类别型属性的统计,并对分析结果进行图形化的展示。(3)推断性统计:选择合适的假设检验方法,分析属性间的相关性、两组数据间是否具有显著性差异,并得出结论。(4)数据挖掘分别利用分类、聚类以及时间序列方法挖掘蕴含在数据中的模式..._r语言大作业

源代码字符编码不一致导致显示乱码_linux 服务器编码与传输数据不一致导致的乱码-程序员宅基地

文章浏览阅读3.7k次。从服务器端传过来的字符串,显示在网页上,居然是乱码!设置网页的编码,不行;试图将该字符串解码,也不行。而且更奇怪的是,同样是这份WEB项目,有些同事的机器上跑,却很正常。当时正在加班,项目很赶,就没有处理。静下来后,想了想,可能是对应的源代码文件编码不对。在VS2015上打开该文件,点菜单栏上的 文件 - 高级保存选项,赫然显示编码是GB2312,而其他代码文件是UTF-8。改过来后,问题修正。其实_linux 服务器编码与传输数据不一致导致的乱码

mysql kill process解决死锁-程序员宅基地

文章浏览阅读9.6k次。show processlist和show full processlistprocesslist命令的输出结果显示了有哪些线程在运行,不仅可以查看当前所有的连接数,还可以查看当前的连接状态帮助识别出有问题的查询语句等。如果是root帐号,能看到所有用户的当前连接。如果是其他普通帐号,则只能看到自己占用的连接。showprocesslist只能列出当前100条。如果想全部列出,可以使用SH..._mysql kill process

x265 命令行参数大全(比较详细)_x265参数-程序员宅基地

文章浏览阅读2.2k次。除非一个参数被标记为 CLI ONLY,否则该参数也被x265_param_parse() 支持。CLI使用getopt 函数来解释命令行参数,长短版本的参数都可以使用,长参数在不引起歧义的情况下可以截断成短参数。API用户必须把完整的参数名传递给 x265_param_parse()。Preset和tune 有特殊的含义,API用户需要在调用x265_param_parse()设置其他参数之前使..._x265参数

阿里发布的Java高并发开发文档,涵盖了所有的高并发操作!-程序员宅基地

文章浏览阅读307次。而今天分享的这份阿里内网“M9级全彩高并发编程手册”,让大家不仅能够学到深度、专业的编程知识,还能感受到阿里专注地提高编程技能的态度,始终如一地贡献、分享Java专业知识与经验的精神,以及持续学习、持续成长的进取精神,文末附高清电子版。看干货获取方式扫描下方公众号【java1234】回复:9966,可获取下载链接????????????????长按上方二维码2 秒回复「9966」即可如果不会领取,或者需要其他java..._m9级全彩高并发编程手册

随便推点

大数据各岗位薪资多少?一张图告诉你答案_云计算工资水平折现图-程序员宅基地

文章浏览阅读2.5k次。目前,借由大数据时代的高速发展,它的岗位需求开始迅速扩张,从而给想从事大数据行业的人带来了大量的发展机会,同时也为大家提供了大量的职业发展通道。那么,在这个高速运转的时代,面对如此众多的大数据就业岗位的时候,我们应该去选择什么样的职业发展方向并努力的去学习相应技能从而达到企业要求呢?根据我们行业内各大权威的机构预测,在2020年期间,大数据行业在大数据相关岗位需求中不断激增,这其中Java大数据工程师的缺口大约会在14万到19万人之间,对于懂得如何利用大数据做决策的分析师和经理的岗位缺口则将达到150万_云计算工资水平折现图

大数据法律监督模型优势特色及应用场景_大数据监管算法模型-程序员宅基地

文章浏览阅读1.4k次。大数据法律监督平台是基于监督数据整合管理平台、监督模型构建平台、内置模型库以及法律监督线索管理平台打造的一套服务于检察机关法律监督工作的专业化系统。_大数据监管算法模型

29-Nor Flash电路设计-程序员宅基地

文章浏览阅读1.2k次,点赞11次,收藏32次。nor flash硬件电路设计_nor flash电路设计

基于Springboot高校校园教室预约系统设计与实现_大学校园教室预约系统-程序员宅基地

文章浏览阅读1.9k次,点赞6次,收藏2次。《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,程序员宅基地专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,免费项目配有对应开发文档、开题报告、任务书、PPT、论文模版等项目都录了发布和功能操作演示视频;项目的界面和功能都可以定制,包安装运行!!!_大学校园教室预约系统

html label设置行高,UILabel 显示HTML 设置行高-程序员宅基地

文章浏览阅读197次。UILabel *label = [[UILabel alloc] init];label.font = [UIFont systemFontOfSize:15];UIFont*font = label.font;//转换HTML 字符串NSDictionary *options = @{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,..._html label行高

2024年10个最佳人工智能视频生成器、10个最佳人工智能转录软件和服务、10个最佳人工智能语音生成器、10个最佳文本转语音生成器,优缺点对比分析及附访问地址可打开直接使用_脚本自动生成视频 软件-程序员宅基地

文章浏览阅读1.1k次,点赞16次,收藏23次。2024年10个最佳人工智能视频生成器、10个最佳人工智能转录软件和服务、10个最佳人工智能语音生成器、10个最佳文本转语音生成器,优缺点对比分析及附访问地址可打开直接使用。_脚本自动生成视频 软件

推荐文章

热门文章

相关标签