How to import an Interface from a dependency of a dependency

Simple question, we have a custom package that uses axios as a dependency and exports a function that returns an Axios Client with some custom default configuration. The problem is that I want the AxiosInstance interface that is not exported from the package itself and axios it's not a dependency in my project.

// @myCustomDep
import { AxiosInstance } from 'axios';
export function createAxiosClient(): AxiosInstance  { //... }
// Main project
import { createAxiosClient } from '@myCustomDep';

// Err: Cannot find name 'AxiosInstance'.
function buildClient(): AxiosInstance {
  const axiosClient = createAxiosClient();
  return axiosClient;
}

What would be the correct way of handling this import without modifying the underlying dependency (if possible)?


Solution 1:

As long as it is a dependency of your dependency, you may very well also list it as your own dependency.

But even without doing so, you can still directly import from a transitive dependency.

TypeScript will only complain if it cannot find it in your node_modules, whether you have listed it as a dependency or not.

You can also use TypeScript utility types: ReturnType<typeof createAxiosClient> https://www.typescriptlang.org/docs/handbook/utility-types.html#returntypetype

Obviously, if possible, you would have your custom dependency re-export whatever is exposed by its API.