目前,Uppy不能正确执行传递给其插件的选项类型,我正在尝试找出解决方法。
我正在使用以下组件:
import React from "react";
import Uppy from "@uppy/core";
import { DashboardModal } from "@uppy/react";
import AwsS3 from "@uppy/aws-s3";
interface Props {
isOpen: boolean;
}
class WatermarkUppy extends React.Component<Props> {
private uppy = Uppy({
autoProceed: true,
});
constructor(props: Props) {
super(props);
this.uppy.use(AwsS3, {
serverUrl: "/",
});
this.uppy.on("complete", response => {
console.log(response);
});
}
render() {
const { isOpen } = this.props;
return (
<DashboardModal
target={document.body}
uppy={this.uppy}
closeModalOnClickOutside
open={isOpen}
plugins={["AwsS3"]}
/>
);
}
}
export default WatermarkUppy;
如果我仅使用插件类名使用了不正确的调用,则选项对象看起来应该正确键入:
但是,一旦我传递了任何选项对象,推断出的类型就变成object
,所以一切顺利:
该签名似乎来自here。
Uppy AwsS3
声明use
的功能签名,如下所示:
declare module '@uppy/core' {
export interface Uppy {
use(pluginClass: typeof AwsS3, opts: Partial<AwsS3.AwsS3Options>): Uppy.Uppy;
}
}
可以找到来源here。
我想知道我导入的不是正确的还是输入的类型不正确,以便我可以提交补丁。谢谢!
编辑:它似乎确实需要做一些重载。在传递与Partial<AwsS3.AwsS3Options>
类型匹配的对象时,可以正确推断出这些类型:
如果传递的对象具有不同的接口,则默认为object
。另外,如果我注释掉第一个定义,则将强制执行选项类型:
use<T extends typeof Plugin>(pluginClass: T, opts: object): Uppy;
现在,应该如何编写这些键入内容,以便在使用AwsS3
类时要求用户使用Partial<AwsS3.AwsS3Options>
选项?