如何将成员添加到 flowjs 中的现有定义

How to add members to an existing definition in flowjs

TypeScript 似乎有一个重要的小功能,可以让您向现有接口定义添加成员。在接口中,成员是可加的,因此如果您使用一组成员定义接口,您可以再次定义接口以向接口添加额外的成员。

我有一个预定义的外部 flowjs 定义文件,如下所示:

declare class JQueryStatic {
  ajax(url: string, settings?: any): any;
}
declare var jQuery: JQueryStatic;
declare var $: JQueryStatic;

现在想向 class JQueryStatic 添加一个新方法 myPlugin(settings?: any): any;

这是以强类型方式支持 jQuery 插件的关键。

在流程中执行此操作的建议方法是什么?

交叉路口类型可能适合您。

type A = { foo: string; };
type B = { bar: string; };
type AB = A & B;

A​​B 的类型为 { foo: string; bar: string;};

来自 https://github.com/Microsoft/TypeScript/issues/1265(参见 "Intersection Type")

关于创建此类声明文件已经存在未决问题:https://github.com/facebook/flow/issues/2421

它还没有受到任何关注,但它可能会(到现在才 5 天)

交叉路口是要走的路。

首先我们需要 jquery 的基本定义,假设它看起来像这样:

// here we declare shape of jquery
declare class $GlobalJquery {
   foo(): void
}

// here we declare global reference to jquery
declare var $: $GlobalJquery;

接下来我们需要在某处声明插件的形状:

interface SomeJqueryPlugin {
  bar(): void;  // plugin adds bar() function to jquery
}

最后,当我们需要使用插件功能时,我们重新声明$

declare var $: $GlobalJquery & SomeJqueryPlugin;

$.foo();
$.bar();