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
仅适用于对象的属性,而不适用于它们的值。
下面的例子(不幸的是它不起作用)应该可以说明这个问题:
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
仅适用于对象的属性,而不适用于它们的值。