//@target: ES6 class Bar { x } class Foo extends Bar { y } class FooIterator { next() { return { value: new Foo, done: false }; } [Symbol.iterator]() { return this; } } function fun(...[a, b]: Bar[]) { } fun(...new FooIterator);