我有一个动态的对象,我知道它将始终具有某些属性,但也将具有其他一些属性。
{
id: number,
name: string,
... // some dynamic stuff
}
有没有一种表达方式,以便对象仍然可以在已知属性上获得IntelliSense,但可以使用其他一些东西。
我对Typescript还是很陌生,所以很抱歉这是一个菜鸟问题。
答案 0 :(得分:3)
按照@jcalz的建议,对此我所知道的最好是索引签名:
interface Foo {
id: number;
name: string;
[prop: string]: any;
}
这将允许向具有id
和number
的对象添加任何内容,并且符合Foo
接口:
const f: Foo = {
id: 1,
name: 'bar',
zoo: 'keeper',
something: new Map<string, symbol>(),
}; // no compile errors here
您还可以稍后添加属性:
foo.anything = 'value';
但是,tsc仍将请求id
和name
。以下声明:
const f: Foo = {
id: 1,
zoo: 'keeper',
something: new Map<string, symbol>(),
}
会产生:
输入“ {{id:number;动物园:字符串;东西:地图; }”不可分配给“ Foo”类型。 类型“ {{id:number;”中缺少属性“名称”动物园:字符串;东西:地图; }'
如果您不知道要添加多少个道具,但又碰巧知道所有道具的通用类型,则可以缩小一些范围:
interface Poem {
author: Author,
language: string,
[verses: string]: string;
}