Я хотел бы знать, как это сделать, скажем, у меня есть два объекта
var objectA = {
propertyA: 1,
propertyB: 2
...
propertyM: 13
}
var objectB = {
propertyN: 14,
propertyO: 15
...
propertyZ: 26
}
Если objectC создается
var objectC = Object.assign(objectA, objectB);
Как я могу объявить / описать objectC, чтобы компилятор / IDE знал, что он имеет свойства как objectA, так и objectB?
Я бы хотел найти способ без необходимости определять интерфейсы для objectA и objectB. Я не хочу дважды писать декларацию и определение / оценку для одного и того же свойства. Эта избыточность важна, если у меня слишком много свойств объекта.
(Есть ли оператор, который может извлечь интерфейс / тип существующего объекта?)
Является ли это возможным?
источник
var objectC = {...objectA, ...objectB};
. ФормаobjectB
свойств переопределит свойства, которые уже были назначены изobjectA
, если свойства имеют то же имя.propertyB: string
, а objectD будет выводить его какpropertyB: number
. Вы можете вручную ввести оба C и D:type ABC = { propertyA: number; propertyB: string | number; propertyC: number; propertyX: string; propertyZ: string; }
или только один из них, установив для свойстваB значение string или number.Используйте тип пересечения + универсальные. Например, отсюда
/** * Quick and dirty shallow extend */ export function extend<A>(a: A): A; export function extend<A, B>(a: A, b: B): A & B; export function extend<A, B, C>(a: A, b: B, c: C): A & B & C; export function extend<A, B, C, D>(a: A, b: B, c: C, d: D): A & B & C & D; export function extend(...args: any[]): any { const newObj = {}; for (const obj of args) { for (const key in obj) { //copy all the fields newObj[key] = obj[key]; } } return newObj; };
Больше
Оба упомянуты здесь: https://basarat.gitbooks.io/typescript/content/docs/types/type-system.html
источник
underscore.d.ts
Вам следует выбрать typeof .
type typeA = typeof objectA; type typeB = typeof objectB;
Чтобы их объединить, вы можете использовать операцию пересечения, как уже указывал басарат.
источник
Используйте оператор распространения Typescript, который транслируется в Javascript Object.assign ()
Если вам нужно слияние объектов глубокого дерева, вы можете использовать функцию изменения лучшего-глобального пакет
источник
попробуй это..
const person = { name: 'TRilok', gender: 'Male' }; const tools = { computer: 'Mac', editor: 'Atom' }; const attributes = { handsomeness: 'Extreme', hair: 'Brown', eyes: 'Blue' }; const summary = {...person, ...tools, ...attributes};
источник