具有命名属性和不同类型的任意命名索引属性的打字稿接口[重复]
Posted
技术标签:
【中文标题】具有命名属性和不同类型的任意命名索引属性的打字稿接口[重复]【英文标题】:Typescript interface with named property and arbitrarily-named index properties of different type [duplicate] 【发布时间】:2015-10-12 05:46:37 【问题描述】:我想为一个对象创建一个接口,该对象具有特定命名属性的特定类型和所有其他属性的不同类型。
如何在下面为foo
编写定义?
let foo =
size: 3,
a: 'foo',
b: 'bar',
c: 'baz'
这将是我的直观方法:
interface Foo
size: number;
[name: string]: string;
但是,TypeScript 尝试将一般定义应用于特定定义并触发以下错误:
error TS2411: Property 'size' of type 'number' is not assignable to string index type 'string'.
【问题讨论】:
【参考方案1】:你可以这样做(我不知道它是否可以在 TS v1.5 中工作):
interface Size
size: number;
interface StringMap
[name: string]: string;
type Foo = Size & StringMap;
【讨论】:
如果您愿意,您也可以将其内联(也不是 100% 确定 ts 1.5)。 type Foo = size: number & [name: string]: string;【参考方案2】:无需定义每个属性,这是意料之中的,但您可以这样做:
interface Foo1
size: number;
[name: string]: string|number;
比使用any
更好。
【讨论】:
以上是关于具有命名属性和不同类型的任意命名索引属性的打字稿接口[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 TypeScript 中使用解构/扩展复制具有重命名属性的对象