不可变函数参数打字稿



有没有办法在函数参数的打字稿中获得不变性? (与Java的final相同)

例:

function add(a: number, b: number): number {
a = 5; // possible
return a + b;
}

我正在寻找什么,例如:

function add(a: ???, b: ???): number {
a = 5; // not possible because it would be immutable
return a + b;
}

我正在搜索这个,因为很清楚函数是否可以修改我的参数。

如果您正在寻找不变性来防止函数引起副作用,则可以使用Readonly<T>类型。

interface Person {
name: string,
age: number,
}
function add_age(person: Readonly<Person>) {
person.age += 5; // not possible because it is immutable
}
add_age({ name: "Bob", age: 37 });

这有点笨拙,但你可以像这样强制执行

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;
}

ab现在const蚂蚁,因此是不可改变的。

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

除了 Aron 的答案之外,您还可以允许add取 0.。n个参数并使它们只读:

function add(...args: readonly number[]): number {
args[0] = 123; // not allowed!
return args.length === 0 ? 0 
: args.length === 1 ? args[0] 
: args.reduce((a, b) => a + b);
}
add() // 0
add(123) // 123
add(123, 456) // 579
add(123, 456, 789) // 1368

。同样,它很笨拙,但它有效。

最新更新