None of these are correct as they all should return return something that implements IResource. The reason I resource is of type T is because if you are not just the base get, query, remove, and delete functions and have defined other actions you need to be able to extend the definition.

Everything starts making more sense if you declare an interface for all your different resources as below.  You define all your expected fields on the response.
```typescript
interface IExtendedResource extends ng.resource.IResource<IExtendedResource> {
   $getChildren(): IExtendedResource;
   field: String;
   on: String;
   expected: Response;
}
```

There is a problem in the current implementation however, as the IResource's type T should really implement IResource<T> but I don't think that worked last we tried.

You should try and implement this and see how it goes. Failing that we should document that the T should be a type that extends IResource

```typescript
interface IResource<T extends IResource<T>> {
```