根据字段将打字稿映射对象映射为具有新对象的数组

时间:2019-03-20 14:44:52

标签: javascript typescript

我有一个带有一些具体字段的对象:

 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)
    }
]

1 个答案:

答案 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表示输入类型必须至少为Objextends true ? 3 : number表示当hello键为true时,索引的类型不是number3

Playground

Playground2