在过去的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>> {
}
此存储库中还有其他代码可以毫无问题地使用它们。 tsc不会抱怨并进行构建。
现在,我在另一个项目中执行npm pack
和npm install ../path/to/my/file-0.0.1.tgz
。然后,当我想使用我的界面(在这种情况下,是redux reducer)时:
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.
我真的不知道为什么会这样。为了建立定义文件,我还需要执行另一步骤吗?理想情况下,我希望不必手动构建它。
让我知道是否需要提供更多详细信息。
感谢您的帮助和耐心阅读。
答案 0 :(得分:0)
您需要在package.json中包含以下内容
...
"main": "dist/index.js",
"typings": "dist/index.d.ts",
"source": "lib/index.ts",
"files": [
"dist",
"lib"
],
...