Typescript в настоящее время не имеет концепции точных типов (есть исключение для литералов объекта, я объясню в конце).Другими словами, каждый объект некоторого интерфейса может иметь дополнительные свойства (которых нет в интерфейсе).
Следовательно, этот объект:
{
command: 34234,
children: [{ foo: 'qwerty' }, { asdf: 'zxcv' }],
}
удовлетворяет интерфейсу Type1
, поскольку обладает всеми свойствами (command
), но также удовлетворяет интерфейсу Type2
, так как имеет всеа также его свойства (children
).
Замечание об объектных литералах: typcript действительно реализует концепцию точного типа только для объектных литералов:
export const unionType: Type1 = {
command: 34234,
children: [{ foo: 'qwerty' }, { asdf: 'zxcv' }], // oops, not allowed here
};
export const unionType: Type2 = {
command: 34234, // oops, not allowed here
children: [{ foo: 'qwerty' }, { asdf: 'zxcv' }],
};
Выше приведен код, демонстрирующийобъектные литералы, и ниже код без них:
const someVar = {
command: 34234,
children: [{ foo: 'qwerty' }, { asdf: 'zxcv' }]
};
const: Type1 = someVar // ok, because assigning not an object literal but a variable