Node.js 如何导出自定义环境模块声明以供使用者使用?

Node.js 如何导出自定义环境模块声明以供使用者使用?,node.js,typescript,module,Node.js,Typescript,Module,我正在创建一个由辅助节点应用程序使用的组件库(都使用Typescript)。在这个组件库中,我们有许多环境模块来帮助键入/加载图片文件,例如: declare module "*.png" { const content: string; export default content; } 以及从第三方库中扩展出的现有但不完整类型的其他类型。。。例如: import * as vc from "victory-core"; import * as

我正在创建一个由辅助节点应用程序使用的组件库(都使用Typescript)。在这个组件库中,我们有许多环境模块来帮助键入/加载图片文件,例如:

declare module "*.png" {
  const content: string;
  export default content;
}
以及从第三方库中扩展出的现有但不完整类型的其他类型。。。例如:

import * as vc from "victory-core";
import * as vl from "victory-label";

declare module "victory-core" {
  export interface CallbackArgs extends vc.CallbackArgs {
    index: number;
  }
}

declare module "victory" {
  export interface VictoryLabelProps extends vl.VictoryLabelProps {
    stringTicks?: string[];
    index?: number;
  }
}
然后使用Rollup编译和构建此库,并由辅助应用程序使用。问题在于,消费者应用程序无法使用这些类型,即,如果某个组件试图将stringTicksarg作为VictoryLabelProps的一部分传入,它将不会被识别为有效的道具。 与.png模块类似,我无法在我的消费者应用程序中加载png文件,除非我复制并粘贴
.d.ts
文件,并将其明确添加为我的消费者应用程序的一部分

下面是我的组件库的配置:

{
  "compilerOptions": {
    "declaration": true,
    "declarationDir": "./dist",
    "outDir": "./dist",
    "rootDir": "./src",
    "target": "es5",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noEmit": true,
    "esModuleInterop": true,
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "jsx": "preserve",
    "baseUrl": ".",
    "typeRoots": [
      "src/types",
      "node_modules/@types"
    ],
  },
  "exclude": ["node_modules", "dist"],
  "include": ["src/**/*"],
}
(我尝试根据添加typeRoots和baseUrl)

和我的rollup.config

{
  input: "src/index.ts",
  output: [
    {
      dir: "dist",
      format: "cjs",
      sourcemap: true,
    },
  ],
  external: ["fs"],
  plugins: [
    peerDepsExternal(),
    commonjs({
      include: "node_modules/**",
    }),
    resolve(),
    babel({
      exclude: "node_modules/**",
      babelHelpers: "bundled",
      extensions: [...DEFAULT_EXTENSIONS, ".ts", ".tsx"],
      presets: [["@babel/preset-react", { runtime: "automatic" }]],
    }),
    typescript(),
    json(),
    image(),
    url({
      include: ["**/*.woff", "**/*.woff2"],
      limit: Infinity,
    }),
  ],
};

感谢您的帮助

您需要在库的
package.json
中包含
types
字段。该字段应包含
.d.ts
目录或文件的路径

{
  "name": "awesome",
  "author": "Vandelay Industries",
  "version": "1.0.0",
  "main": "./lib/main.js",
  "types": "./lib/main.d.ts"
}
更多信息: