reactjs - 在 TypeScript 中将 hashmap 类型正确作为函数参数
问题描述
import React from 'react';
import styled from 'styled-components';
const IconWrapper = styled.Text`
font-family: MyFont;
`;
const glyphs = {
'logo': '\ue94e',
'minus': '\ue900',
'plus': '\ue901',
...
};
interface IconProps {
glyph: string;
}
const Icon: React.FC<IconProps> = ({ glyph }) => {
return (
<IconWrapper>{glyphs[glyph]}</IconWrapper>
);
};
export default Icon;
我需要而不是glyph: string
传递显式类型enum
(或 keyof 字形)。那可能是枚举,但我不想再次复制整个结构。
谢谢你的想法
解决方案
您可以使用keyof
关键字组合typeof
来缩小类型
const Icon = ({ glyph: keyof typeof glyphs }) => {
为了可读性,您可以定义另一种类型,如下所示:
type GlyphIcon = keyof typeof glyphs;
const Icon = ({ glyph: GlyphIcon }) => {
推荐阅读
- ruby - 如何在 VS Code 的 Ruby 调试器中配置 $LOAD_PATH?
- python - 处理潜在丢失的 JSON 字段的最佳方法是什么?
- angular - 在 Angular 中重复几次使用单击事件的多个弹出窗口
- c - 有没有办法在 while 或 for 循环中交换数学运算符?
- c# - NLog:如何在一个配置下添加 2 个不同的数据库目标和规则?
- python - 如何在 python discord.py Disord Bot 中使用用户输入
- docusignapi - eg-01-csharp-jwt-framework-master 或 eg-01-csharp-jwt-core-master 示例,RequestJWTUserToken 不适合我
- ruby-on-rails - 带有夹具的 Rails 和 Cucumber 未加载夹具中的更改
- c# - 您是否能够使用 Visual Studio 将“WebBrowser”合并到 .aspx 中?
- apache-spark - 如何在 Pyspark 中计算模数?