Fix type inference for the public interface of plugins created with the zeppelinPlugin() helper

This commit is contained in:
Dragory 2020-07-22 22:08:20 +03:00
parent 4019b9e1a2
commit a848e00fdd
No known key found for this signature in database
GPG key ID: 5F387BA66DF8AAC1

View file

@ -8,11 +8,18 @@ export interface ZeppelinPluginBlueprint<TPluginType extends BasePluginType = Ba
showInDocs?: boolean;
}
export function zeppelinPlugin(name: string, blueprint: Omit<ZeppelinPluginBlueprint, "name">): ZeppelinPluginBlueprint;
export function zeppelinPlugin<TPluginType extends BasePluginType>(): (
export function zeppelinPlugin<TPartialBlueprint extends Omit<ZeppelinPluginBlueprint, "name">>(
name: string,
blueprint: Omit<ZeppelinPluginBlueprint<TPluginType>, "name">,
) => ZeppelinPluginBlueprint<TPluginType>;
blueprint: TPartialBlueprint,
): TPartialBlueprint & { name: string };
export function zeppelinPlugin<TPluginType extends BasePluginType>(): <
TPartialBlueprint extends Omit<ZeppelinPluginBlueprint<TPluginType>, "name">
>(
name: string,
blueprint: TPartialBlueprint,
) => TPartialBlueprint & { name: string };
export function zeppelinPlugin(...args) {
if (args.length) {
const blueprint: ZeppelinPluginBlueprint = plugin(...(args as Parameters<typeof plugin>));