typescript - 如何定义一个接口,其键限制为此类对象数组中每个对象中包含的属性值的联合?
问题描述
interface Filter {
id: string;
name: string;
}
type Filters = Filter[];
const filters = [{ id: 'f1', name: 'f1name'}, { id: 'f2', name: 'f2name'}]
interface State { ... }
const state = {
f1: any,
f2: any
}
我想输入state
. 我想要一个State
类型,它是一个与 中的对象具有相同数量的属性的对象filters
,并且我想将每个属性的类型限制为id
来自 的属性类型的联合filters
。
在上面的示例中, state 是 type State
,即“具有'f1' | 'f2'
具有 value的键的对象any
。
解决方案
如果您声明过滤器as const
以保留字符串文字类型,您可以这样做:
const filters = [{ id: 'f1', name: 'f1name' }, { id: 'f2', name: 'f2name' }] as const
type Id = (typeof filters)[number]['id']
type State = Record<Id, any>
const state: State = {
f1: 42,
f2: 'any'
}
推荐阅读
- java - MongoDB java 错误 java.lang.NoClassDefFoundError: com/mongodb/MongoClient
- javascript - 为什么redux-form源代码中的这个函数被另一个函数包裹了?
- javascript - 灯廊图片下载问题
- android - 如何使用 Volley GET 方法传递参数
- jenkins - 如何从 Jenkins 文件中获取最后提交的变更列表
- angular - 错误 TS2339:“可观察”类型上不存在属性“捕获”
' - ios - Swift:如何在创建实例之前检查存储的属性
- node.js - 使用节点 js 连接 SharePoint 列表
- python - python字典到用户输入
- solidity - cryptozombies(solidity) 为什么使用存储而不是内存?