首页 > 解决方案 > 接受任意数量的键值对象的接口

问题描述

我有以下接口/类型,如下所示:

export interface Bar {
  title?: string;
  [key: string]: string;
}

export type Foo = {
  name: string;
} & {
  [key: string]: Bar;
};

当我尝试像这样声明一个变量时:

const someObject: Foo = {
  name: 'John',
  city: {
    a: 'something',
  },
};

它给了我错误:

键入'{名称:字符串;城市:{一个:字符串;}; }' 不可分配给类型 'Foo'。键入'{名称:字符串;城市:{一个:字符串;}; }' 不可分配给类型 '{ [key: string]: Bar ; }'。属性“标题”与索引签名不兼容。类型 'string' 不能分配给类型 'Bar'。


问题

如何创建一个接口来满足一个对象,例如:

const someObject: Foo = {
  name: 'John',
  randomProperty1: { a: 'a' },
  randomProperty2: { b: 'b' },
  // any number of 'Bar'
};

标签: javascripttypescriptgenericsinterface

解决方案


推荐阅读