Saya memiliki objek dengan beberapa bidang konkret:

 const obj1: Obj = {  
    hello: true, 
    second: false, 
    third: 311,  
    fifty: 50  
    .....  
}  

Saya perlu memetakan beberapa bidang dari objek ini ke angka konkret, (dan menggunakannya nilainya) dan mengembalikan array dengannya:

interface ArrayItem {
    index: number;
    visible: boolean;
}

// hello should be mapped to 3, and visible - 'true'
// result is:
const arr: ArrayItem[] = [{index: 3, visible: true}]

Untuk bidang beton. misalnya jika obj1, memiliki bidang "halo", hasilnya adalah:

[  
    {
     index: 3  
     visible: (value of 'hello', so -> true)  
    }  
]  

Contoh lainnya:

 const obj1: Obj = {
    hello: true,
    second: false,
    third: 311,
    fifty: 50
    .....
}

// bidang, yang saya cari:

const mapped = {
    hello: 3, // index value
    second: 5 // index value
}

Keluaran:

[
    {
     index: 3
     visible: (value of 'hello', so -> true)
    }
    {
     index: 5
     visible: (value of 'second', so -> false)
    }
]
0
trigger 20 Maret 2019, 17:44

1 menjawab

Jawaban Terbaik

Mari kita deklarasikan definisi tipe Obj

type Obj = { [key: string]: boolean };

Objek dengan banyak kunci, dan bool pada semua nilai.

Item array terlihat seperti ini:

interface ArrayItem {
    index: number;
    visible: boolean;
}

Tapi kita bisa mendapatkan lebih banyak pengetahuan tentang tipe berdasarkan nilai dari Obj. Untuk mendeklarasikannya mari kita tulis InterfaceParser generik.

type InterfaceParser<T extends Obj> = {
  index: T['hello'] extends true ? 3 : number;
  visible: boolean;
}

T extends Obj berarti jenis input minimal harus Obj. extends true ? 3 : number artinya jika kunci hello benar maka tipe indeksnya bukan number adalah 3.

Tempat bermain

Taman bermain2

1
Przemyslaw Jan Beigert 21 Maret 2019, 16:30