Cri*_*sty 11 javascript readonly immutability typescript
我想要一个返回一个数组的函数,但是我希望返回的数组是只读的,所以当我尝试更改其内容时,我应该收到警告/错误.
function getList(): readonly number[] {
return [1,2,3];
}
const list = getList();
list[2] = 5; // This should result in a compile error, the returned list should never be changed
Run Code Online (Sandbox Code Playgroud)
这可以在TypeScript中实现吗?
Bor*_*ard 18
来自 OP 的代码现在可以工作了,因为TypeScript 3.4 引入了一种新的语法ReadonlyArray:
虽然在不打算改变的情况下使用
ReadonlyArrayover是一种很好的做法Array,但鉴于数组具有更好的语法,这通常是一种痛苦。具体而言,number[]是的简写版Array<number>,就像Date[]是一个速记Array<Date>。TypeScript 3.4 引入了一种新语法,用于对数组类型
ReadonlyArray使用新readonly修饰符。
此代码现在按预期工作:
function getList(): readonly number[] {
return [1,2,3];
}
const list = getList();
list[2] = 5; // <-- error
Run Code Online (Sandbox Code Playgroud)
游乐场。
这看似有效......
function getList(): ReadonlyArray<number> {
return [1, 2, 3];
}
const list = getList();
list[0] = 3; // Index signature in type 'ReadonlyArray<number>' only permits reading.
Run Code Online (Sandbox Code Playgroud)
在游乐场尝试一下
ReadonlyArray<T> 像这样实现:
interface ReadonlyArray<T> {
readonly [n: number]: T;
// Rest of the interface removed for brevity.
}
Run Code Online (Sandbox Code Playgroud)
以下将使列表只读,但其中的项目不是:
function getList(): Readonly<number[]> {
return [1,2,3];
}
let list = getList();
list = 10; // error
list[1] = 5 // that is fine
Run Code Online (Sandbox Code Playgroud)
这将使列表及其项目成为只读:
function getList(): ReadonlyArray<number> {
return [1,2,3];
}
let list = getList();
list = 10; // error
list[1] = 5 // error as well
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4140 次 |
| 最近记录: |