2017-11-25 170 views
1

我有这样的代码段在打字稿:ReadonlyArray在TypeScript中继承了哪些类?

const arr: ReadonlyArray<string> = [ 
    "123", 
    "234" 
]; 

arr.push("345"); 

TS编译器显示了一个错误:Property 'push' does not exist on type 'ReadonlyArray<string>'。当然很显然,我不能改变/改变这个数组,但问题是 - 什么是ReadonlyArray的基类?它是否继承了标准Array类?

+0

这是只读 - 你不能推上新的项目。那么它将是可写的。 –

+0

很明显,这个数组是只读的,但我的问题是要弄清楚 - ReadonlyArray是如何实现的,它是从哪个基类派生出来的 –

+0

查看回答:)链接到里面的源代码 –

回答

2

https://www.typescriptlang.org/docs/handbook/interfaces.html 指出

TypeScript comes with a ReadonlyArray<T> type that is the same as Array<T> with all mutating methods removed, so you can make sure you don’t change your arrays after creation

如果你想要光源,头部到

https://github.com/Microsoft/TypeScript/blob/master/src/lib/es5.d.ts#L978

(其定义为线978在目前的版本)。

+0

这是一个相当普遍的答案'TypeScript来使用与Array 相同的ReadonlyArray 类型,并删除所有变异方法。 那么这是否意味着他们做了类似于: 'ReadonlyArray.prototype.push = null'? –

+0

很酷,谢谢! 这就是我正在寻找的。 –