阻止tsc为js组件生成声明文件



我正在维护一个旧的react库,我希望我正在开发的新组件是类型化的(这样我可以在使用它时获得自动完成和类型检查(。但我不想返工我以前的js组件(至少现在没有足够的时间(。

当我编译库时,会为tsx文件(这很好(生成声明文件,也会为jsx文件生成声明文件。这里的问题是jsx的声明文件不准确。typescript所做的是用我的jsx组件的所有道具定义一个类型,并根据需要指定它们——即使是不需要的道具。因此,在使用时,它会在使用库时处处触发警告。

例如,该组件被指定为";具有所需的类道具";编译后:

JSX:

const SecondaryButton = ({ children, classes, ...props }) => {
return (
<BaseButton
className={`btn btn-secondary${classes ? ` ${classes}` : ''}`}
{...props}
>
{children}
</BaseButton>
);
};

d.ts申报文件:

export default SecondaryButton;
declare function SecondaryButton({ children, classes, ...props }: {
[x: string]: any;
children: any;
classes: any;
}): JSX.Element;
declare namespace SecondaryButton {
namespace defaultProps {
const classes: string;
}
namespace propTypes {
const classes_1: PropTypes.Requireable<string>;
export { classes_1 as classes };
}
}
import PropTypes from "prop-types";

我认为解决方案可能是不为我的旧jsx组件生成声明文件,但我不知道如何配置这样的行为。你觉得怎么样?

也许这些文件可以在tsconfig中排除?请参见:包含和排除。

或者,您可以禁用所有javascript文件。参见:allowJs

请注意,如果您希望在某些情况下包含多个tsconfig文件,则可以使用这些文件

我相信一个替代方案可以是为JSX代码中的每个可选道具添加一个默认值,但我还没有测试过。

最新更新