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
请发表评论