我有一个带有一些具体字段的对象:
const obj1: Obj = {
hello: true,
second: false,
third: 311,
fifty: 50
.....
}
我需要将此对象的某些字段映射到具体数字(并使用它的值)并返回数组:
interface ArrayItem {
index: number;
visible: boolean;
}
// hello should be mapped to 3, and visible - 'true'
// result is:
const arr: ArrayItem[] = [{index: 3, visible: true}]
对于具体领域。例如如果obj1的字段为“ hello”,则结果为:
[
{
index: 3
visible: (value of 'hello', so -> true)
}
]
更多示例:
const obj1: Obj = {
hello: true,
second: false,
third: 311,
fifty: 50
.....
}
//字段,我正在查看:
const mapped = {
hello: 3, // index value
second: 5 // index value
}
输出:
[
{
index: 3
visible: (value of 'hello', so -> true)
}
{
index: 5
visible: (value of 'second', so -> false)
}
]
答案 0 :(得分:1)
让我们声明Obj的类型定义
type Obj = { [key: string]: boolean };
具有许多键的对象,并且在所有值上均为布尔值。
数组项如下:
interface ArrayItem {
index: number;
visible: boolean;
}
但是我们可以基于Obj
中的值获得有关类型的更多知识。为了声明这一点,让我们编写InterfaceParser
泛型。
type InterfaceParser<T extends Obj> = {
index: T['hello'] extends true ? 3 : number;
visible: boolean;
}
T extends Obj
表示输入类型必须至少为Obj
。 extends true ? 3 : number
表示当hello键为true时,索引的类型不是number
为3
。