一个typescript参数可以被注解为const吗?

wa7juj8i  于 2023-01-27  发布在  TypeScript
关注(0)|答案(4)|浏览(163)

如果我不希望参数的值在函数作用域中改变,有没有办法用Typescript注解它?
我试过了

function walk(const fileName: string): string[] {
// -----------^
}

但它不起作用。

ghg1uchk

ghg1uchk1#

现在没有办法这样做,也可能没有,因为在ES6中也不可能:
How to make function parameter constant in JavaScript?
无论如何,此解决方法不适用于TypeScript。

wj8zmpe1

wj8zmpe12#

目前尚不支持该功能,但您可以投票反对此功能请求,并在将来跟踪它以获取任何更新:https://github.com/microsoft/TypeScript/issues/18497
与此同时,最好的办法是使用linter规则使参数默认为const,比如ESLint's no-param-reassign rule,在极少数情况下,如果需要参数为 not const,可以在每次重新分配时使用eslint-disable-line,或者将整个函数 Package 在eslint-disable/eslint-enable对中,使其 * 所有 * 参数都为非const。

6psbrbz9

6psbrbz93#

Typescript还不支持在函数参数中使用const,但是可以使用readonly参数。
Typescript 3.4增加了对readonly数组和元组(还不是对象)的支持。
示例:

function foo(arr: readonly string[]) {}

function foo(pair: readonly [string, string]) {}

function foo(arr: ReadonlyArray<string>) {}
ffx8fchx

ffx8fchx4#

一个包含一些额外字符的简短变通方法接近实现:

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

但是你仍然可以用args.x=2覆盖。

相关问题