Я видел много вопросов по этому поводу, но ответы всегда включают литералы массива, что мне не помогает ...
Например, у меня есть класс, подобный
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'.