我想知道是否有一种(有效的)方法可以在不使用新变量的情况下扩展隐式参数的类型,
例如:
;[{ firstName: "John", lastName: "Smith" }]
.map( person => {
const newPerson = person as typeof person & { name: string }
newPerson.name = `${newPerson.firstName} ${newPerson.lastName}`
return newPerson
}
就像...
.map( (person: person & { name: string } ) => ...
我能用仿制药吗?
3条答案
按热度按时间xzabzqsa1#
您可以定义一个新的类型,供以后使用。
我觉得最好的办法是把Map还给我,
这样做的好处是,由于您已经定义了类型,如果发生任何更改,则类型脚本将忽略使用map返回的数组的错误。
x7yiwoj42#
您需要的不是扩展函数参数,而是使用自己的返回值,这正是
Array.prototype.map
的作用。因此,map
在TypeScript中的类型如下:U
可以从map
回调参数中推断出来,因此只需使用TypeScript的推断功能:TypeScriptPlayground
von4xj4u3#
不使用新变量扩展隐式参数的类型
否,无论类型是推断的还是显式的,TypeScript都会将任何额外的属性视为潜在的输入错误。
“变通方法”实际上是重新键入(类型Assert)或创建一个新变量,这显式地告诉TypeScript额外的成员是有意的。
对于经验丰富的JavaScript开发人员来说,这看起来像是一个障碍,因为自由添加新属性是他们的一个非常常见的做法。
这是TypeScript迫使您编写与普通JS完全不同的代码的少数情况之一。
在这里,它更像是一个烦恼,而不是一个关键的限制,因为变通方案非常简单(顺便说一句,在JS中,您可以使用
forEach
代替,因为您“返工”项目,而map
已经在语义上指向TS解决方案,正如GuerricP的答案所解释的那样)。您可以将其视为类型显式性的代价。