Typescript接口具有命名属性和任意命名的不同类型的索引属性

时间:2015-07-22 11:20:16

标签: typescript typescript1.5

我想为一个对象创建一个接口,该对象具有特定命名属性的特定类型和所有其他属性的不同类型。

我如何为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'.

2 个答案:

答案 0 :(得分:5)

你可以这样做(我不知道它是否适用于TS v1.5):

interface Size {
    size: number;
}

interface StringMap {
    [name: string]: string;
}

type Foo = Size & StringMap;

答案 1 :(得分:4)

没有定义每个属性,这是预期的,但你可以这样做:

interface Foo1 {
    size: number;
    [name: string]: string|number;
}

比使用any更好。