Interface for dynamic key in typescript

后端 未结 6 1566
一生所求
一生所求 2020-12-05 12:33

I have an Object like this that is created by underscore\'s _.groupBy() method.

myObject = {
  \"key\" : [{Object},{Object2},{Object3}],
  \"key         


        
相关标签:
6条回答
  • 2020-12-05 13:04

    Instead of using Object as a type use Record

    interface myObjInterface {
      [key: string]: Record<string, any>[]
    }
    
    0 讨论(0)
  • 2020-12-05 13:05

    I would suggest a solution with Map, maybe for someone it will be useful:

    type TKey = 'key1' | 'key2' | 'key3';
    type TValue = object[];
    
    type TMapper = Map<TKey, TValue>; // But also you can use Record instead of Map
    
    0 讨论(0)
  • 2020-12-05 13:09
    { [x: string]: T }
    

    and

    Record<string, T>
    

    usually will serve for all your objectives. However, I got to a strange point where after some type operations the first option was returning to me both [x: string] and [x: number], and I wasn't being able to use the Record, as it was a recursive type operation and Typescript was throwing an error saying my recursive type wasn't generic.

    So, studying the really small Record code, I came to this solution that solved my complex problem:

    { [P in string]: T }
    

    Edit: I also usually have this in every Typescript code I write, in a utils.ts file:

    export type obj<T = unknown> = Record<string, T>
    

    Faster and cleaner than using the Record all the time.

    E.g.:

    type MyObjectType = {
      propA: obj; // An object with unknown props
      propB: obj<number>; // An object with number props
    }
    
    0 讨论(0)
  • 2020-12-05 13:18

    There's now a dedicated Record type in TypeScript:

    const myObject: Record<string, object[]> = { ... }
    

    Also, consider typing the keys whenever possible:

    type MyKey = 'key1' | 'key2' | ...
    
    const myObject: Record<MyKey, object[]> = { ... }
    
    0 讨论(0)
  • 2020-12-05 13:19

    don't know about interface, for dynamic objects we can go something like this:

    let memoTable: { [k: number]: number } = {};
    memoTable[1]=5;
    memoTable[2]=7;
    
    0 讨论(0)
  • 2020-12-05 13:22

    Your object looks like a dictionary of Object arrays

    interface Dic {
        [key: string]: Object[]
    }
    
    0 讨论(0)
提交回复
热议问题