use generics:
interface A {
a: string;
}
function createArray<T extends A>(arr: T[]): A[] {
return arr;
}
function pushElement<T extends A>(arr: A[], value: T) {
arr.push(value);
}
const a: A[] = createArray([{ a: "a" }, { a: "a", b: "b" }]);
pushElement(a, { a: "a", c: "b" })