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>) {}
