All code is fast to write. Decisions like this should be optimized for reading and comprehension, not writing.
IMO: Extreme opinions one way or the other don't work, and thus (most of the time) code-complete automation also doesn't work.
import { User } from "./User"; # is probably the most readable and comprehensible way to write this.
import { User } from "app/domain/users/types/User"; # is probably less comprehensible
import { User } from "../User"; # may be ok, but it may also depend on how deep this directory is, because
import { User } from "app/users"; # is actually pretty comprehensible
The point should be to make it really quick for readers to understand where this code is coming from. Imagine a situation where you've got identically named imports; like a
import { User } from "foo/db/types"; # used to schematize a user in the database
import { User } from "foo/api/createUser/types"; # used to schematize a component of the request body for creating users
Maybe the tokens themselves are named poorly, but look past that.
Many people find a specific file using, simply, CMD+P (or your editor's equivalent). There's no context for where they may be at; which inherently makes relative imports less comprehensible.
import { User } from "./User";
const u = new User(req.body.user); # but wait... what kind of user did I just create?
There are many ways to help alleviate this low state of comprehension; and what should be deployed is difficult to create hard-and-fast rules around because its so domain specific.
import { User } from "foo/api/createUser/types";
# having an import path like this can help, but maybe only in small files where the imports aren't 500 lines above where they're used.
import { User as CreateUserAPIUser } from "./User";
# aliasing imports is a good solution
import * as createUserApiTypes from "foo/api/createUser/types";
const u = new createUserApiTypes.User(req.body.user);
# importing, then properly naming, the entire module is in my experience an underutilized tool to help with comprehension.