Typescript(编译时)中是否可以使用不可变命名参数(具有默认值)?

Are Immutable named parameters (with defaults) possible in Typescript (compile time)?

下面的例子(不幸的是它不起作用)应该可以说明这个问题:

function test({ name = 'Bob', age = 18 }: { readonly name?: string, readonly age?: number }) {
  // this should result in an error (but doesn't):
  name = 'Lisa';
}

这个有趣的 article 有一些关于如何使用参数实现不可变性的信息,但是据我所知,这不适用于默认参数。

您可能认为这是一种解决方法,但您并不是真正在传递 'named parameters',您传递的是一个对象。

所以这可以很容易地重写为:

function test(args: { name?: string, age?: number }) {
  const { name = 'Bob', age = 18 } = args;
  // this will error
  name = 'Lisa';
}

readonly 没有延续的原因是因为您正在创建全新的变量。 readonly 仅适用于对象的属性,而不适用于它们的值。