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

Typescript(编译时)中是否可以使用不可变的命名参数(默认值)?,typescript,parameters,immutability,optional-parameters,default-parameters,Typescript,Parameters,Immutability,Optional Parameters,Default Parameters,下面的例子(不幸的是不起作用)应该说明这个问题: 函数测试({name='Bob',age=18}:{readonly name?:string,readonly age?:number}){ //这会导致错误(但不会): 姓名=‘丽莎’; } 这个有趣的有一些信息是如何用参数实现不可变的,但是,这并不适用于默认参数。 你可以认为这是一种解决方法,但是你并不是真的传递“命名参数”,而是在传递一个对象。 因此,这可以相当容易地重写为: 函数测试(参数:{name?:string,age?:num

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

函数测试({name='Bob',age=18}:{readonly name?:string,readonly age?:number}){
//这会导致错误(但不会):
姓名=‘丽莎’;
}

这个有趣的有一些信息是如何用参数实现不可变的,但是,这并不适用于默认参数。

你可以认为这是一种解决方法,但是你并不是真的传递“命名参数”,而是在传递一个对象。 因此,这可以相当容易地重写为:

函数测试(参数:{name?:string,age?:number}){
常量{name='Bob',age=18}=args;
//这将导致错误
姓名=‘丽莎’;
}

之所以
readonly
无法继续,是因为您正在创建全新的变量<代码>只读< /代码>只适用于对象的属性,但不适用于它们的值。

您可能认为这是一种解决方法,但实际上不是传递“命名参数”,而是传递对象。

因此,这可以相当容易地重写为:

函数测试(参数:{name?:string,age?:number}){
常量{name='Bob',age=18}=args;
//这将导致错误
姓名=‘丽莎’;
}

之所以
readonly
无法继续,是因为您正在创建全新的变量
readonly
仅适用于对象的属性,而不适用于对象的值。

谢谢,您的解决方案非常接近最佳值(如您所述,是实名参数)!事实上,它们不是默认参数,但它是最接近默认参数的。谢谢,您的解决方案非常接近最佳值(正如您所提到的,真实命名参数)!事实上,它们不是默认参数,但它可能是最接近默认参数的。