【问题标题】:Parcel typescript module augmentation包裹打字稿模块扩充
【发布时间】:2021-12-26 17:17:15
【问题描述】:

我正在尝试通过 Parceljs 发布一个使用 typescript module augmentation 的库,但它似乎没有捆绑这些模块增强。我无法在项目中使用导入 Parcel 生成的库的属性。

{
  "name": "my-library",
  "version": "1.0.0",
  "source": "src/index.js",
  "main": "dist/main.js",
  "module": "dist/module.js",
  "types": "dist/types.d.ts",
  "devDependencies": {
    "parcel": "latest"
  }
}

我尝试使用 Parcel 和 Typescript 增强的示例。

import { Components, createTheme, PaletteOptions } from '@mui/material/styles';

declare module '@mui/material/styles' {
  interface Palette {
    ternary: Palette['primary'];
    quaternary: Palette['primary'];
    gridColor: string;
    logoColor: string;
  }
  interface PaletteOptions {
    ternary?: PaletteOptions['primary'];
    quaternary?: PaletteOptions['primary'];
    gridColor?: string;
    logoColor?: string;
  }
}

export const defaultTheme = createTheme();

来自使用 Parcel 构建的库的导出的 defaultTheme 不会附带我在此处定义的其他属性。我希望它们可用。

【问题讨论】:

  • 您能否提供库包的简化复制品以及您如何使用它?同时有两个想法:(1)打字稿文档中显示模块扩充如何工作的示例似乎表明扩充的使用者将从两个 separate 文件中导入,这与以下想法背道而驰将您的库代码捆绑到一个文件中(例如整个包裹点)。 (2) 您的 package.json 缺少 types 字段 - 没有它,包裹根本不会生成任何 .d.ts 文件 - 请参阅 docs
  • 我编辑了我的问题,类型字段已定义我只是在最初的消息中忘记了它

标签: reactjs typescript parceljs


【解决方案1】:

很遗憾,这里好像是a bug in parcel

更新 (2021-11):此 PR to fix this bug 已被接受。该修复程序在 version 2.0.0-nightly.296 及更高版本 (link) 中可用,并且还应在 2.0.1 之后的 @parcel/transformer-typescript-types 的下一版本中提供。如果您使用的是 2.0.1 或更早版本,请继续阅读以了解解决方法。

您可以使用tsc 为您的项目生成.d.ts 文件来解决此问题。以下是你的做法:

  1. 确保您的package.json 配置为告诉parcel 输出与根源文件同名的文件(例如,如果根源文件是/src/index.ts,请确保您的@987654335 中有"main": "dist/index.js" @)
  2. 添加tsconfig.json,内容如下:
    {
      "compilerOptions": {
        "rootDir": "./src",
        "declaration": true,
        "emitDeclarationOnly": true,
        "outFile": "./dist/index.js",
      }
    }
    
  3. 在构建步骤中添加一个命令,删除 parcel 生成的 .d.ts 文件,并使用 tsc 创建一个新文件。例如。 parcel build 变为 parcel build && rimraf dist/index.d.ts && tsc

我知道这不漂亮,但希望它能解除对你的阻止。

这里是a repo where you can see an example of both the bug and the workaround

【讨论】:

  • 谢谢你,我会订阅这个问题并等待修复!
  • 我的PR to fix this issue 被接受了。该修复程序在每晚频道中可用 - 版本 2.0.0-nightly.296 及更高版本。在 2.0.1 之后的下一个版本中应该可以在稳定频道中使用。
  • 非常感谢您!
猜你喜欢
  • 1970-01-01
  • 2019-06-20
  • 2013-08-27
  • 2023-03-29
  • 2016-07-04
  • 2020-08-26
  • 2016-12-12
  • 2018-02-11
  • 2021-09-25
相关资源
最近更新 更多