1、ReadonlyArray 简介

在TypeScript中,除了Array<T>类型,还有一个ReadonlyArray<T>类型,ReadonlyArray类型和Array 类型很相似,但它是一个特殊的类型,用于生成不应该被更改的数组。

通过Array<T>声明的数组是可以修改的,例如:

let fruits: Array<string> = ['草莓', '樱桃','苹果']

console.log(' fruits', fruits)  // ['草莓', '樱桃','苹果']

// 修改数组项

fruits[0] = '西瓜'

console.log(' fruits', fruits) //  ["西瓜", "樱桃", "苹果"]

而通过ReadonlyArray<T>声明的数组不能被修改,如下代码所示:

let fruits: ReadonlyArray<string> = ['草莓', '樱桃','苹果']

fruits[0] = '西瓜'
// error,类型“readonly string[]”中的索引签名仅允许读取 fruits.push('西瓜')
// error,类型“readonly string[]”上不存在属性“push”, 也没有push方法 

2、ReadonlyArray 简写方式

正如TypeScript为Array<Type>提供了简写方式Type[],TypeScript也为ReadonlyArray<Type>提供了简写方式,写法为:readonly Type[]

例如:

let fruits: ReadonlyArray<string> =  ['草莓', '樱桃','苹果']

// 可以简写为
let fruits: readonly string[] = ['草莓', '樱桃','苹果']

3、ReadonlyArray 赋值方式

我们可以将常规的Array类型数组分配给ReadonlyArray,但是不能将ReadonlyArray类型分配给Array类型。

let x:readonly string[]  = ['苹果']
let y:string[] = ['香蕉'] x = y
// 可以将常规Array类型值赋值给ReadonlyArray 类型 console.log('x',x)
// x ['香蕉'] y = x
// 不能将ReadonlyArray类型分配给Array类型

出错的原因分析:类型readonly string[]为只读类型,不可分配给可变类型 string[]

4、提示:ReadonlyArray只作为类型使用, 不能当成构造函数使用

与Array类型不同, ReadonlyArray只作为类型使用, 不能当成构造函数使用,如下所示:

new ReadonlyArray('草莓', '樱桃','苹果')

// error: ReadonlyArray 仅表示类型, 但是这里作为值使用

而Array不仅仅是TypeScript中的类型, 还是JavaScript中的构造函数:

new Array('草莓', '樱桃','苹果')
// ok

5、参考

http://www.mybatis.cn/typescript/index.html

TypeScript ReadonlyArray(只读数组类型) 详细介绍的更多相关文章

  1. MyBatis查询结果resultType返回值类型详细介绍

    一.返回一般数据类型 比如要根据 id 属性获得数据库中的某个字段值. mapper 接口: // 根据 id 获得数据库中的 username 字段的值 String getEmpNameById( ...

  2. oracle学习之路(二)------数组类型/记录类型的使用

    Oracle记录类型介绍 RECORD:用户自己定义数据类型,由单行多列的标量构成的复合数据类型.它将一个或多个标量封装成一个对象进行操作记录不能够总体拿来比較也不能够总体推断为空.能够总体拿来赋值. ...

  3. 010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二——变量类型——即Java中的数据类型

    010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二--变量类型--即Java中的数据类型 Java中变量的三要素 变量名 变 ...

  4. html <input>标签类型属性type(file、text、radio、hidden等)详细介绍

    html <input>标签类型属性type(file.text.radio.hidden等)详细介绍 转载请注明:文章转载自:[169IT-最新最全的IT资讯] html <inp ...

  5. java并发编程(十二)----(JUC原子类)数组类型介绍

    上一节我们介绍过三个基本类型的原子类,这次我们来看一下数组类型: AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray.其中前两个的使用方 ...

  6. java基础:方法的定义和调用详细介绍,方法同时获取数组最大值和最小值,比较两个数组,数组交换最大最小值,附练习案列

    1. 方法概述 1.1 方法的概念 方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集 注意: 方法必须先创建才可以使用,该过程成为方法定义 方法创建后并不是直接可 ...

  7. Android SQLite 数据库详细介绍

    Android SQLite 数据库详细介绍 我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用 ...

  8. 详细介绍Redis的几种数据结构以及使用注意事项(转)

    原文:详细介绍Redis的几种数据结构以及使用注意事项 1. Overview 1.1 资料 <The Little Redis Book>,最好的入门小册子,可以先于一切文档之前看,免费 ...

  9. Java 集合系列10之 HashMap详细介绍(源码解析)和使用示例

    概要 这一章,我们对HashMap进行学习.我们先对HashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashMap.内容包括:第1部分 HashMap介绍第2部分 HashMa ...

随机推荐

  1. 论文解读(GCA)《Graph Contrastive Learning with Adaptive Augmentation》

    论文信息 论文标题:Graph Contrastive Learning with Adaptive Augmentation论文作者:Yanqiao Zhu.Yichen Xu3.Feng Yu4. ...

  2. SpringBoot 入门及配置

    1.首先创建Maven文件,右键单击鼠标,others搜索Maven,点击Maven Project 2.点击下一步,打上勾下一步,输入包名和项目名称 3.第三步修改pom.xml导入Maven依赖M ...

  3. MDL锁

    mdl锁的主要作用是用来维护表元数据的一致性.在表上有活动事务的时候,不可以对表元数据进行修改操作. 如果没有MDL锁的保护,那么session2可以直接执行,并导致session1出错. MDL锁是 ...

  4. HTTP:聊一聊HTTPS

    一.什么是https https是http的升级,因为http是明文传输的,所以非常不安全,https在http的基础上进行了数据加密. 二.https的加密方式 1.对称加密 服务端会给客户端发送一 ...

  5. 这3个免费PPT素材网站,一定要收藏

    制作PPT,这三个网站的素材绝对够用! 1.象刀设计 https://www.101dao.com 象刀设计里面有非常多PPT模板,这个网站也是主打PPT素材. 分类很清晰,需要什么风格的素材能快速找 ...

  6. 国产芯片DP9637-K总线收发器替代L9637D芯片和SI9241

    DP9637可以替代L9637D,低成本解决方案,只需要做简单硬件修改,感兴趣可以留言或者联系小编了解详细资料.   主要特性    电压工作范围 6V≤VBAT≤36V    具有超低休眠电流 ...

  7. Ajax简单运用(JavaScript-----jQuery-------)

    首先引用 jQuery <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.4.1.min.js"> ...

  8. 干货|Linux平台搭建网关服务器

    概述 集群中一共10台服务器组成了局域网环境,但其中只有一台有外网网卡可以访问互联网.现要求另外9台服务器通过这台主机进行互联网访问.  实验环境介绍 利用iptables搭建网关服务器,即通过SNA ...

  9. linux项目部署(非前后端分离crm)

    参考博客 参考博客2---部署过程 导论:看参考博客1 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收 ...

  10. Flutter异步与线程详解

    一:前言 - 关于多线程与异步 关于 Dart,我相信大家都知道Dart是一门单线程语言,这里说的单线程并不是说Dart没有或着不能使用多线程,而是Dart的所有API默认情况下都是单线程的.但大家也 ...