我想为一个对象创建一个接口,该对象具有特定命名属性的特定类型和所有其他属性的不同类型。
我如何为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'.
答案 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
更好。