我正在浏览一个代码库,并遇到了复杂的语法
return json?.result?.map(
({ text: label, value }: { text: string; value: any }) => ({
label,
value,
}),
);
我模糊地理解(如果我错了,请纠正我(类似的东西
对于json
对象的每个结果,运行一个函数,该函数将一个对象作为参数并返回另一个对象。
该参数实现了与该: { text: string; value: any }
的接口
虽然{ text: label, value }
,但我不明白这里发生了什么。label
不是在任何地方声明的变量。
{ text: label, value }
是一个析构函数赋值,与typescript没有任何关系。它获取某个对象,并将其键"value"绑定到名为value的局部变量,将其密钥"text"绑定到某个名为"label"的局部变量。
例如:
const testObj = {
text: "text",
value: "value"
}
const printTestObj = ({ text: label, value }) => {
console.log("label = " + label)
console.log("value = " + value)
}
printTestObj(testObj)
此功能在TypeScript手册中被称为属性重命名,是对象析构函数的高级形式。
您对json
结构的评估是正确的,它的类型似乎是Optional<{result?: {text: string, value: any}[]}>
。因此,包含上述片段的函数的ReturnType
是Optional<{label: string, value: any}[]>
。