If I do not want the value of a parameter change within a function scope, is there any way to annotate that with Typescript?
I've tried:
function walk(const fileName: string): string[] {
// -----------^
}
But it does not work.
If I do not want the value of a parameter change within a function scope, is there any way to annotate that with Typescript?
I've tried:
function walk(const fileName: string): string[] {
// -----------^
}
But it does not work.
There is no way to do it right now, and it may not be, as it is not possible in ES6
either:
How to make function parameter constant in JavaScript?
This workaround doesn't work for TypeScript anyway.
It's not supported yet, but you can upvote this feature request & follow it for any updates in the future: https://github.com/microsoft/TypeScript/issues/18497
In the meantime your best bet is to use a linter rule to make arguments const by default, like ESLint's no-param-reassign rule. In any rare cases where you need an argument to be not const, you can either use eslint-disable-line
each place you reassign it, or wrap the whole function in an eslint-disable
/ eslint-enable
pair to make all its arguments non-const.
A short workaround with a few extra characters gets close:
function fo(args: {x: number,y: string}): void{
const {x,y} = args;
x = 2; // Cannot assign to 'x' because it is a constant.ts(2588)
}
function fa(...args: [x: number,y: string]): void{
const [x,y] = args;
x = 2; // Cannot assign to 'x' because it is a constant.ts(2588)
}
but you can still overwrite using args.x=2
.
Typescript doesn't support const
in the function parameter yet, but you can do readonly
parameters.
Typescript 3.4 added support for readonly
arrays and tuples (not objects yet).
Examples:
function foo(arr: readonly string[]) {}
or
function foo(pair: readonly [string, string]) {}
or
function foo(arr: ReadonlyArray<string>) {}