不可变函数参数typescript

不可变函数参数typescript,typescript,Typescript,有没有办法让函数参数的typescript具有不变性? (与java相同,带有最终版本) 例如: 函数添加(a:编号,b:编号):编号{ a=5;//可能 返回a+b; } 以及我正在搜索的内容,例如: 函数添加(a:?,b:?):编号{ a=5;//不可能,因为它是不可变的 返回a+b; } 我之所以搜索这个函数,是因为如果一个函数可以修改我的参数,那么它的清晰度就很高。这有点粗糙,但你可以像这样执行它 function add(...params: readonly [a: number

有没有办法让函数参数的typescript具有不变性? (与java相同,带有最终版本)

例如:

函数添加(a:编号,b:编号):编号{
a=5;//可能
返回a+b;
}
以及我正在搜索的内容,例如:

函数添加(a:?,b:?):编号{
a=5;//不可能,因为它是不可变的
返回a+b;
}

我之所以搜索这个函数,是因为如果一个函数可以修改我的参数,那么它的清晰度就很高。

这有点粗糙,但你可以像这样执行它

function add(...params: readonly [a: number, b: number]): number {
  const [a, b] = params;
  a = 5;
//^^^^^
//Cannot assign to 'a' because it is a constant.

  return a + b;
}
a
b
现在是
const
蚂蚁,因此是不可变的


但是请注意,尽管
params
readonly
,但这只会阻止您执行诸如推送或拼接元组数组之类的操作。它不会阻止您完全重新分配数组

除了Aron的答案之外,您还可以允许
add
接受0..n个参数并使其为只读:

函数添加(…参数:只读编号[]):编号{
args[0]=123;//不允许!
返回args.length==0?0
:args.length==1?args[0]
:args.reduce((a,b)=>a+b);
}
add()//0
加(123)//123
加(123456)//579
加(123456789)//1368

…再说一遍,它很粗糙,但很有效。

这不是语言功能。你可以用一根短绒来处理这个问题,请注意,TSLint已被弃用。谢谢,这正是我正在搜索的内容。这很有趣,但我看不出它如何解决这个问题,因为它只能通过规程和代码审查来强制执行,而规程和代码审查也可以强制执行,而不是首先重新分配参数。它也会使代码变得混乱,使调用方更难理解函数的接口。我不反对这样的说法,即它使内容更难阅读,而且它不能解决
params
可能被重新分配的问题。但是
a
b
const
蚂蚁,因此在JavaScript级别是不可变的。尝试重新分配
a
b
将导致运行时错误-除了TS类型错误之外。这是运行时验证的一个要点。然而,这似乎纯粹是一个代码可读性和bug预防问题。