reactjs - 如何为 Typescript 中的 Object.values 获得的数组键赋予自定义类型?
问题描述
代码:https ://codesandbox.io/s/zealous-morning-3q6gm?file=/src/App.tsx
错误:
'(key: Fiat) => JSX.Element' 类型的参数不能分配给'(value: string, index: number, array: string[]) => Element' 类型的参数。参数“key”和“value”的类型不兼容。类型“字符串”不可分配给类型“菲亚特”。
我想要实现的目标:引用需要 FIAT 类型的密钥。因此,当我映射时,我想将键添加为 FIAT 类型,而不仅仅是字符串。这甚至可能吗?如果是,我怎么能做到这一点?
解决方案
一种选择是Object.keys(accounts)
像这样设置类型:
(Object.keys(accounts) as Array<keyof typeof accounts>
所以你的整个代码就变成了:
export default function App() {
const [accounts] = React.useState<AccountsMap>({
"USD": 100,
"AUD": 10,
"BRL": 50
});
const [quote] = React.useState<Quote>({ USD: 2.5, AUD: 1.9, BRL: 5 });
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
<h2>Start editing to see some magic happen!</h2>
{(Object.keys(accounts) as Array<keyof typeof accounts>).map((key: Fiat) => (
<p> {quote[key]} </p>
))}
{(Object.keys(accounts) as Array<keyof typeof accounts>).map((key: Fiat) => (
<p> {quote[key]} </p>
))}
</div>
);
}
在这里,我们建议 typescript 将返回的字符串数组Object.keys(accounts)
视为 typeof 帐户的键类型,在本例中为 type Fiat
。
推荐阅读
- javascript - 使用带有过滤数据集的 V-for 循环
- python - Python中使用VMD方法进行时间序列分解
- memory-management - 为什么我在释放可分配数组时一直有进程中止信号?
- azure - 在 azure 函数绑定中使用 http 标头值
- google-sheets - 如果有,如何删除名称后面的整数?(谷歌表)
- soap - 动态 NAV 2018 Web 服务:创建销售订单行出现错误“标准代码文本不存在....”
- wordpress - 图像尺寸渲染大于定义的 Elementor Wordpress
- android - 使用应用内评论时 Google Play Core 库中的神秘崩溃?(错误的行号,错误的文件名......)
- django - Django将登录的登录用户保存为ForeignKey
- docker - DOCKER 在 DOCKERFILE 中将 shell 值分配给 ENV