【发布时间】:2019-10-20 21:02:29
【问题描述】:
我有一个动态创建的 icon-Map.json。示例:
const iconMap = {
angleDoubleRight: 'angleDoubleRight.svg',
angleRight: 'angleRight.svg',
assets: 'assets.svg',
barChart: 'barChart.svg',
cancel: 'cancel.svg',
chevronDown: 'chevronDown.svg',
dotChart: 'dotChart.svg',
dotMenu: 'dotMenu.svg',
horizontalDots: 'horizontalDots.svg'
...
};
我无法从此对象手动创建接口,因为我是动态创建的,因此无法使用 keyof。
最后,我想创建一种可以在组件外部使用的 iconMap 键类型,它只会将我的输入限制为 iconMap 的键。 (联合或枚举):
type IconMapMember = 'angleDoubleRight' | 'angleRight' | 'assets' | ....
【问题讨论】:
-
类型是一个静态概念。假设您以某种方式定义了您的类型,例如:
type IconMapMember = 'angleDoubleRight' | 'angleRight'|...,那么在向iconMap对象添加新属性后您将要做什么?类型不能在运行时修改,它们是用于编译时的。 -
这一切都归结为您所说的“动态”。如果您的意思是“在运行时”,那么您将无能为力。如果您的意思是“以编程方式在 TypeScript 编译器运行之前发生的某个构建步骤中”,或者甚至“在编译器可以看到的其他一些用户编写的代码中”,那么您可以做一些事情。
标签: typescript typescript-typings