reactjs - TypeScript 新手,这段代码有什么作用?
问题描述
interface CountryMap {
ISO_A3?: string
NAME?: string
color?: string
}
export const GlobalStats = ({
tooltipContent,
}: {
tooltipContent: CountryMap
}) => {...}
<GlobalStats tooltipContent={tooltipContent} />
大家好,我正在尝试理解开源代码,并且需要有关此特定行的帮助:
({tooltipContent,}: {tooltipContent: CountryMap})
看起来它正在使用一个 javascript 对象并将其“投射”到一个界面中,但语法看起来与我在谷歌上搜索到的非常不同。
- 为什么第一个花括号中的 tooltipContent 后面还有一个逗号?
- 这是简写吗?
- 有人可以解构/eil5吗?
解决方案
它做了两件事:它将具有tooltipContent
属性的对象作为参数,其值为 type CountryMap
。这就是冒号的作用:
: { tooltipContent: CountryMap }
(就像,在任何参数列表中,您会看到类似argName: string
指示参数是字符串的内容)
如果您事先将其设为命名类型,则可能会更清楚地理解语法:
type Arg = {
tooltipContent: CountryMap;
};
export const GlobalStats = ({
tooltipContent,
}: Arg) => {...}
此外,它正在解构参数的tooltipContent
属性并将其放入一个独立的变量名中,以便在函数体中使用。
在普通的 Javascript 中,没有类型,函数看起来像:
export const GlobalStats = ({ tooltipContent }) => {
// reference tooltipContent here
};
这相当于
export const GlobalStats = (obj) => {
const tooltipContent = obj.tooltipContent;
// reference tooltipContent here
};
这也相当于
export const GlobalStats = (obj) => {
const { tooltipContent } = obj;
// reference tooltipContent here
};
(不过,像在原始 Typescript 代码中那样解构参数本身是最简洁的,因此通常是首选)
推荐阅读
- c# - 如何在 C# Windows 窗体的 MS 图表中添加次要刻度线?
- php - php广告中的反序列化函数结果字符串的额外斜杠
- sql-server-2008 - 当表 1 中出现新值时,如何自动更新表 2 中的值
- angular - 我已经为不同的组件创建了模块,但是 loadChildren 不适用于模块
- jquery - JQuery 数据表按钮不工作/不显示
- python - Tflite 在 python 解释器和 iOS 中给出不同的准确性/行为
- java - 在不触发触发器的情况下启动 Quartz Scheduler
- arrays - 快速从 JSON 创建一个数组
- kubernetes - 过期后更新 kubernetes pki
- ibm-cloud - IBM Watson STT:如何使用具有多个块的 Websocket 接口?