【发布时间】:2021-11-27 04:44:09
【问题描述】:
有没有什么方法可以通过宏库、eslint 规则、tsconfig 设置、魔术global.d.ts 文件或其他方式使函数参数默认为只读?
// I want the compiler to turn this:
function foo(a: A[], b: Record<string, string> {
}
// Into this
function foo(a: ReadonlyArray<A>, b: Readonly<Record<string, string>> ) {
}
【问题讨论】:
-
您想要将您的代码自动转换为invalid TypeScript 的东西吗?没有办法说
readonly b: number作为函数参数。你是什么意思?应该允许没有人为函数体内的b变量重新赋值?如果是这样,则没有这样的功能,ReadonlyArray<A>也不会为a这样做。我糊涂了;帮助! -
也许您正在寻找eslint.org/docs/rules/no-param-reassign?但这不是任何 TS 语法都能实现的。
-
对不起,忽略
number的情况。只考虑可变参数。当我开始写这个问题时,我有foo(args: {a: number, b: string})。那个 eslint 规则似乎很有用,但我的 Q 是关于让函数不改变可变参数。 -
您想要将
Record<string, string>转换为ReadonlyMap<string, string>的东西吗?这些是完全不同的数据结构。转换是否也应该修改属性访问,以使b.bar之类的东西变成b.get("bar")?您能否三重检查您的要求并确保您问题中的代码构成minimal reproducible example?
标签: typescript macros immutability readonly