, . :
export interface Aggr {
[name: string]: AggrEntry |Aggr;
filter?: Aggr;
}
, , , , filter Aggr.
- type :
export type Aggr = {
[name: string]: AggrEntry;
} & {
filter?: Aggr;
}
let test : Aggr;
let foo = test.foo // foo is AggrEntry
test.filter // works, is of type Aggr
, , . filter . Object.assign :
let test : Aggr = Object.assign({
foo: new AggrEntry()
}, {
filter: {
bar: new AggrEntry()
}
});
, , Object.assign:
function createAggr(dynamicPart: {
[name: string]: AggrEntry;
}, staticPart?: {
filter?: Aggr;
}) {
return Object.assign(dynamicPart, staticPart);
}
let test : Aggr = createAggr({
foo: new AggrEntry()
}, {
filter: {
bar: new AggrEntry()
}
});