I'm trying to create a typed function that is only allowed to return non-primitive results. Either sync or async. However, it seems that the `Promise<object>` constraint isn't enforced in the code, since `Promise` itself is already a non-primitive.

```
function nonPrimitiveResult(): object | Promise<object> {
    return {};                  // OK
    return 1;                   // Error
    return undefined;           // Error
    return Promise.resolve({}); // OK
    return Promise.resolve(1);  // OK, why?
    return Promise.resolve();   // OK, why?
}

```