I read how TypeScript module resolution works.
I have the following repository: @ts-stack/di. After compiling the directory structure is as follows:
├── dist
│ ├── annotations.d.ts
│ ├── annotations.js
│ ├── index.d.ts
│ ├── index.js
│ ├── injector.d.ts
│ ├── injector.js
│ ├── profiler.d.ts
│ ├── profiler.js
│ ├── providers.d.ts
│ ├── providers.js
│ ├── util.d.ts
│ └── util.js
├── LICENSE
├── package.json
├── README.md
├── src
│ ├── annotations.ts
│ ├── index.ts
│ ├── injector.ts
│ ├── profiler.ts
│ ├── providers.ts
│ └── util.ts
└── tsconfig.json
In my package.json I wrote "main": "dist/index.js"
.
In Node.js everything works fine, but TypeScript:
import {Injector} from '@ts-stack/di';
Could not find a declaration file for module '@ts-stack/di'. '/path/to/node_modules/@ts-stack/di/dist/index.js' implicitly has an 'any' type.
And yet, if I import as follows, then everything works:
import {Injector} from '/path/to/node_modules/@ts-stack/di/dist/index.js';
What am I doing wrong?
Here are two other solutions
When a module is not yours - try to install types from @types
:
npm install -D @types/module-name
If the above install errors - try changing import
statements to require
:
// import * as yourModuleName from 'module-name';
const yourModuleName = require('module-name');