在Typescript Document中有一个例子。
interface NumberDictionary {
[index: string]: number;
length: number; // ok, length is a number
name: string; // error, the type of 'name' is not a subtype of the indexer
}
我明白为什么这是不正确的。
但有时我真的想要一个name: string
,length: number
类型的对象。其他索引是number
。如何编写接口来匹配跟随对象?
{
name: 'Bill',
length: 123,
foo: 1,
bar: 2,
// .... blahblah
}
答案 0 :(得分:2)
您可以使用交集类型定义这样的类型,但是您需要使用Object.assign
来初始化它,对象文字将无法满足机器人索引和name
:
type NumberDictionary = { [index: string]: number; } & {
length: number;
name: string;
}
var dd: NumberDictionary = Object.assign({
name: 'Bill',
length: 123
}, {
foo: 1,
bar: 2,
});
let fc = dd["foo"] // number
let dName = dd.name; //string
答案 1 :(得分:0)
您可以使用交叉点类型。
type NumberDictionary = {
[index: string]: number
} & {
length: number,
name: string,
}