Я пытался выяснить это в течение последних 3-4 дней, много гуглял и читал, но я не вижу ни одного примера, содержащего мой вариант использования. Я хочу npm publish
библиотеку, которая содержит определения типов.
Я только что действительно начал делать TS, потому что другим командам нужна моя библиотека для поддержки типов.
Итак, позвольте мне попробовать положить столько (и так мало) деталей, как я думаю:
tsconfig. json:
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"allowUmdGlobalAccess": true,
"baseUrl": ".",
"declaration": true,
"declarationMap": true,
"forceConsistentCasingInFileNames": true,
"jsx": "react",
"module": "commonjs",
"noImplicitAny": true,
"noUnusedParameters": true,
"noUnusedLocals": true,
"outDir": "./dist/",
"paths": {
},
"sourceMap": true,
"strict": true,
"target": "es6",
},
"include": [
"./src"
]
}
package. json:
"main": "dist/index.js",
"scripts": {
"tsc": "tsc",
"prepack": "npm run clean && npm run tsc",
},
"types": "./dist/index.d.ts",
src /index.ts (то есть встроенный в dist / index. js + dist / index.d.ts):
export { IAction, IState } from './types';
src / types (то есть встроенный в dist / types. js + dist / types.d.ts):
import { Map } from 'immutable';
export interface IAction {
type: string;
payload: object;
}
export interface IState extends Map<string, Map<string, any>> {
}
У меня есть другой код в этом репо, который использует их без проблем. ts c не жалуется и строит их.
Пока я делаю npm pack
и npm install ../path/to/my/file-0.0.1.tgz
в моем другом проекте. Затем, когда я хочу использовать свои интерфейсы (в данном случае редукторный редуктор):
import { IAction, IState } from 'my-lib'; // <-- match my package.json name
const reducer = (state: IState, action: IAction) => {
...
}
я получаю следующие ошибки:
error TS2709: Cannot use namespace 'IState' as a type.
error TS2709: Cannot use namespace 'IAction' as a type.
Я действительно не могу понять, почему это происходит. Есть ли еще один шаг, который мне нужно сделать, чтобы построить мой файл определения? В идеале, я бы предпочел не создавать его вручную.
Дайте мне знать, если мне нужно предоставить более подробную информацию.
Спасибо за вашу помощь и терпение, прочитав это.