假设类中创建的 readonly 类型的属性,该类型的属性只能在声明处或构造器中进行初始化。

  1. class Octopus {
  2. readonly name: string;
  3. readonly numberOfLegs: number = 8;
  4. constructor (theName: string) {
  5. this.name = theName;
  6. }
  7. }

为了初始化 name 属性,不得不在构造器中声明另一个入参 theName。这显得冗余。

TypeScript 提供了在构造器上同时完成属性的声明和初始化的功能。

以下代码和上面的等效:

  1. class Octopus {
  2. readonly numberOfLegs: number = 8;
  3. constructor(readonly name: string) {
  4. }
  5. }

这种通过在构造器的入参中声明属性的方式叫作 Parameter properties

通过在构造器入参上添加访问限定符(accessibility modifier ),readonly 或两者结合,该参入便会成为类的属性。

一个比较综合的示例:

  1. class Foo {
  2. a: string;
  3. public b: string;
  4. protected c: string;
  5. constructor(d: number, public e: string) {}
  6. }
  7.  
  8. var foo = new Foo(1, "2");
  9.  
  10. console.log(foo.a); // ✅ a 没有修饰词,和 C++ struct 默认公有表现一样为 public,与 C++ class 默认私有刚好相反

  11. console.log(foo.b); // ✅ b 是公有

  12. console.log(foo.c); //
  13. TypeScript 参数属性的更多相关文章

      1. Windows消息传递函数SendMessage参数属性
      1. Windows消息传递函数SendMessage参数属性 转载于:http://www.cr173.com/html/5605_1.html Windows是一个消息驱动式系统,SendMessage ...

      1. Angular2入门:TypeScript的类 - 参数属性:定义和初始化类成员
      1. typescript静态属性,静态方法,抽象类,多态
      1. /* 1.vscode配置自动编译 1.第一步 tsc --inti 生成tsconfig.json 改 "outDir": "./js", 2.第二步 任务 ...

      1. CLR via C#(11)-无参属性、有参数属性(索引器)
      1. 一. 无参属性 1. 定义属性 无参属性就是我们最常见的属性方式,在赋值时可以加入一定的逻辑判断.属性的定义其实不复杂,先看个直观的例子: 说明: 属性要定义名称和类型,且类型不能是void. 属性是 ...

      1. Uploadify 3.2 参数属性、事件、方法函数详解
      1. 一.属性 属性名称 默认值 说明 auto true 设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传 . buttonClass ” 按钮样式 buttonCursor ‘ ...

      1. (转)Uploadify 3.2 参数属性、事件、方法函数详解
      1. 转自http://blog.sina.com.cn/s/blog_5079086b0101fkmh.html Hallelujah博客 一.属性 属性名称 默认值 说明 auto true 设置为tr ...

      1. odoo之model参数属性1
      1. 1.基础文件及目录结构 在认识odoo ORM框架前,先介绍一下odoo中模块目录结构.   data:存放模块预制数据 i18n:存放国际化文件 models:存放模型等py代码 security: ...

      1. KindEditor-编辑器配置参数属性
      1. KindEditor-源码分析 通过使用KE.show(config)方法即可将编辑器添加到文档中.下面是一段源码: KE.show = function(args) {     KE.init(ar ...

      1. struts获得参数(属性,对象,模型驱动)
      1. 0. strutsMVC

    1.  
    2. 随机推荐

        1. javascript获取当前时间CurentTime
        1. function CurentTime(){ var now = new Date(); var year = now.getFullYear(); //年 var month = now.getMo ...

        1. jquery列表操作
        1. <span> <button>全选</button> <button>不选</button> <button>反选</bu ...

        1. js对象可扩展性和属性的四个特性(下)
        1. # js对象可扩展性和属性的四个特性(下) 一.前言 再次花时间回顾一下基础,毕竟要想楼建的好,地基就要牢固,嘻嘻! 在开始之前需要具备对prototype.__proto__.constructor ...

        1. 链接脚本(Linker Script)应用实例(一)使用copy table将函数载入到RAM中运行
        1. 将函数载入到RAM中运行需要以下三个步骤: (1)用编译器命令#pragma section "<section name>" <user functions&g ...

        1. 使用 Zookeeper 的 Api 实现服务订阅
        1. 服务提供者 服务提供者中拷贝 Constants 服务提供者中拷贝 UserService 连接 Zk 集群 /*** * 连接ZooKeeper集群 */ public ZooKeeper conn ...

        1. cs5642-v3各配置文件测试图片对比
        1. 寄存器功能强大,可以配置很多参数,每个参数出来的图像都不同 我们以cs5642-v3的两个配置进行了对比测试 测试准备 配置文件:ov5642_960p_RAWOV5642_YUV_VGA 测试摄像 ...

        1. JS376- Axios 使用指南
        1. 点击上方"前端自习课"关注,学习起来~ 来源 | https://www.jianshu.com/p/df464b26ae58 一.axios    基于promise用于浏览器和 ...

        1. K3clouderp系统实时滚动展示未处理数据,监控投诉处理进度
        1.  痛点:企业内部erp人工记录产品投诉销售单,是否跟踪处理完客户投诉,结果不能实时透明,当天还有多少未解决的投诉单,也不能实时查看到,除非手工去系统单据查询,很不方便,跟踪也不顺畅!   解决方案:利 ...

        1. svn下载多模块及依赖框架的项目
        1. 安装TortoiseSVN之后,在新建的文件里右键svn checkout 输入公司配给的svn地址.用户名.密码 需要分模块下载的项目在地址后面的三个...中选择需要下载的项目,点击OK等待下载完成

        1. Java基础知识》Java字符串详解
        1. 本文内容: String类的概述 String类的使用步骤 String类的常用方法 本文目的: 能够使用String类的构造方法创建字符串对象 能够明确String类的构造方法创建对象,和直接赋值创 ...