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. switch语法

    1. js 代码 // 1. switch 语句也是多分支语句 也可以实现多选1 // 2. 语法结构 switch 转换.开关 case 小例子或者选项的意思 // switch (表达式) { / ...

  2. Android四大组件——Activity——Activity之间通信上

    Activity之间的跳转有显式意图和隐式意图两种. 显式意图(显式Intent): //创建一个Intent对象,明确Intent跳转时的源Activity和目标Activity.参数一为当前Act ...

  3. vite初使用随记

    vite的安装 按照官网文档来看,并不难. 先检查自己电脑node的版本与npm的版本/yarn的版本 可以直接用yarn安装,yarn create vite 这是最原始的安装,即类似于安装vue- ...

  4. Git&Gitee

    目录 Git Git介绍 安装 命令学习 Git的作用 git与svn比较 Git,GitHub,GitLab,Gitee Git工作流程 Git常用命令 在仓库目录终端下 - 设置全局用户 在仓库目 ...

  5. 100ms的SQL把服务器搞崩溃了

    前言 一个项目上线了两个月,除了一些反馈的优化和小Bug之外,项目一切顺利:前期是属于推广阶段,可能使用人员没那么多,当然对于项目部署肯定提前想到并发量了,所以早就把集群安排上,而且还在测试环境搞了一 ...

  6. Linux进程总结

    一个执着于技术的公众号 进程 进程,是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.它的执行需要系统分配资源创建实体之后,才能进行.举个例子: ...

  7. 重新审视C# Span<T>数据结构

    先谈一下我对Span的看法, span是指向任意连续内存空间的类型安全.内存安全的视图. Span和Memory都是包装了可以在pipeline上使用的结构化数据的内存缓冲器,他们被设计用于在pipe ...

  8. AspNetCore7.0源码解读之UseMiddleware

    Use​Middleware​Extensions 前言 本文编写时源码参考github仓库主分支. aspnetcore提供了Use方法供开发者自定义中间件,该方法接收一个委托对象,该委托接收一个R ...

  9. form表单与CSS选择器和样式操作

    form表单 """获取前端用户数据并发送给后端服务器""" <form action=""></fo ...

  10. 有关状压DP

    [以下内容仅为本人在学习中的所感所想,本人水平有限目前尚处学习阶段,如有错误及不妥之处还请各位大佬指正,请谅解,谢谢!] 引言 动态规划虽然已经是对暴力算法的优化,但在某些比较特别的情况下,可以通过一 ...