Как мне сделать типизированный массив значений ключа в карту ES6 в TypeScript? - PullRequest
0 голосов
/ 22 октября 2019

Я видел много вопросов по этому поводу, но ответы всегда включают литералы массива, что мне не помогает ...

Например, у меня есть класс, подобный

interface Foo {
   [key: string]: Bar;
}

И я бы хотел иметь возможность сделать что-то вроде

function getFooMap(myFoo: Foo): Map<string, Bar> {
    return new Map(myFoo)
}

Но я получаю ошибку

TS2345: Argument of type 'Foo' is not assignable to parameter of type 'readonly (readonly [{}, {}])[]'.
Type 'Foo' is missing the following properties from type 'readonly (readonly [{}, {}])[]': length, concat, join, slice, and 16 more.

Я также попытался определить сигнатуру метода как

Array<[string, string]

function getFooMap(myFoo: Array<[string, Bar]): Map<string, Bar> {
    return new Map(myFoo)
}

Но тогда проблема в том, что по какой-то причине я не могу привести Foo к Array <[string, Bar]. </p>

Приведенный ниже код кристаллизует его. Я действительно думаю, что это должно работать, это явно не так, но я не могу понять, каков правильный путь.

export interface Foo {
    [key: string]: Bar
}

const myFoo: Foo = [
    {key: "key1", value: {}},
    {key: "key1", value: {}},
    {key: "key1", value: {}}
]

Я получаю ошибку

TS2322: Type '{ key: string; value: {}; }' is not assignable to type 'Bar'.
  Object literal may only specify known properties, and 'key' does not exist in type 'Bar'.
...