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. 2021.11.03 P2886 [USACO07NOV]Cow Relays G(矩阵+floyed)

    2021.11.03 P2886 [USACO07NOV]Cow Relays G(矩阵+floyed) [P2886 USACO07NOV]Cow Relays G - 洛谷 | 计算机科学教育新生 ...

  2. 2021.08.01 P3377 左偏树模板

    2021.08.01 P3377 左偏树模板 P3377 [模板]左偏树(可并堆) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<iostream> ...

  3. 在django中使用orm来操作MySQL数据库的建表,增删改

    多张表之间的三种关系:一对一,一对多,多对多 创建表 一对一 xx = models.OneToOneField(to='表明',to_field='字段名',on_delete=models.CAS ...

  4. Quantexa CDI(场景决策智能)Syneo平台介绍

    Quantexa 大数据服务提供商, 使用实体解析, 关系分析和人工智能技术帮助客户进行数据处理和预防金融犯罪. 企业概览 2016年成立, 当前规模500人 服务特色是场景决策智能CDI(conte ...

  5. springmvc05-json交互处理

    什么是json: JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛. *采用完全独立于编程语言的文本格式来存储和表示数据 ...

  6. kali 更换国内源

    打开source源 vim /etc/apt/sources.list 没有权限进行更改 获取root 权限 按 i 提示内容: E325: 注意 发现交换文件 "/var/tmp/sour ...

  7. Bugku CTF练习题---加密---凯撒部长的奖励

    Bugku CTF练习题---加密---凯撒部长的奖励 flag:SYC{here_Is_yOur_rEwArd_enjOy_It_Caesar_or_call_him_vIctOr_is_a_Exc ...

  8. Git 使用心得 & 常见问题整理

    开源Linux 回复"读书",挑选书籍资料~ Git 流程图 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remot ...

  9. .NetCore Hangfire任务计划

    安装Hangfire 新建ASP.NET Core空 项目,.Net Core版本3.1 往*.csproj添加包引用,添加新的PackageReference标记.如下所示.请注意,下面代码段中的版 ...

  10. DOM操作标签、事件绑定、jQuery框架/类库

    DOM操作标签 ''' 在起变量名的时候 如果该变量指向的是一个标签 那么建议使用 xxxEle eg:aEle\pEle\divEle\spanEle ''' # 动态创建一个a标签并添加到页面指定 ...