At first, I have a type like this:

```js
type Foo = {
    bar: string;
    children: Foo[];
};

```

Now, I want to allow extending of the `Foo` type so users can add properties, but still provide at least `bar` and `children`. I figured I could easily do that:

```js
interface Foo<T extends Foo<T>> {
    bar: string;
    children: T[];
}

```

But then I tried to declare such a type... and I can't:
[![requires 1 type arg](https://i.stack.imgur.com/U2x5b.png)](https://i.stack.imgur.com/U2x5b.png)

It's an infinite loop...

So, I then try with a default generic type parameter, but then again, I can't...
[![circular default](https://i.stack.imgur.com/X7IXL.png)](https://i.stack.imgur.com/X7IXL.png)

Am I having a brain fart? or is this not doable?

I am trying to convey:

* the type `Foo` is extensible
* the type `Foo` has a `children` property of the same type as the type itself
* full type-safety (so no `any` anywhere - pun intended)