reactjs - 包裹打字稿模块扩充
问题描述
我正在尝试发布一个使用带有 Parceljs 的 typescript模块扩充的库,但它似乎没有捆绑这些模块扩充。我无法在项目中使用导入 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 不会附带我在此处定义的其他属性。我希望它们可用。
解决方案
不幸的是,这看起来像是parcel 中的一个错误。
更新(2021-11):这个修复这个错误的 PR已被接受。该修复程序在version 2.0.0-nightly.296
及更高版本中可用(链接),并且也应该在@parcel/transformer-typescript-types
after的下一个版本中发布2.0.1
。如果您使用的是版本2.0.1
或更早版本,请继续阅读以了解解决方法。
您可以通过使用为您的项目tsc
生成文件来解决此问题。.d.ts
以下是你将如何做到这一点:
- 确保您
package.json
已配置为告诉 parcel 输出与根源文件同名的文件(例如,如果根源文件是,请/src/index.ts
确保您"main": "dist/index.js"
在package.json
- 添加
tsconfig.json
具有以下内容的a:{ "compilerOptions": { "rootDir": "./src", "declaration": true, "emitDeclarationOnly": true, "outFile": "./dist/index.js", } }
- 在您的构建步骤中添加一个命令,该命令删除
.d.ts
由 parcel 生成的文件,并使用tsc
. 例如parcel build
变成parcel build && rimraf dist/index.d.ts && tsc
我知道这并不漂亮,但希望它会解除对您的阻止。
推荐阅读
- c++ - c++中的图形菜单
- javascript - 同时启动两个函数或它们写入不同的值
- java - 如何在 https 中使用 Selenium 在 Url 中传递 Windows 凭据
- python - 在 Python 中定义 bin 的累积频率
- io - 控制 USB 需要哪些操作系统命令?
- android - 抽象 ViewModel 不更新 LiveData Android MVVM
- excel - 使用 SQL 将带有空字段的 MS Access 2016 表单导出到 Excel 电子表格
- java - 如何在 Google App Engine 中添加 --promote?
- vba - 使用 INNER JOIN 时,用于 MS Access 的 VB 不起作用
- salesforce - 用于自动转换顶点类的 Salesforce Apex 测试类。接收错误转移到生产