TypeScript ReadonlyArray(只读数组类型) 详细介绍

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

posted @ 2022-06-30 10:43  楚楚99  阅读(1496)  评论(0编辑  收藏  举报