как npm publi sh определение интерфейса машинописи - PullRequest
0 голосов
/ 15 января 2020

Я пытался выяснить это в течение последних 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.

Я действительно не могу понять, почему это происходит. Есть ли еще один шаг, который мне нужно сделать, чтобы построить мой файл определения? В идеале, я бы предпочел не создавать его вручную.

Дайте мне знать, если мне нужно предоставить более подробную информацию.

Спасибо за вашу помощь и терпение, прочитав это.

...