gpt4 book ai didi

javascript - 为类定义重用流类声明

转载 作者:行者123 更新时间:2023-11-29 17:52:58 24 4
gpt4 key购买 nike

在这种情况下,如何在不复制粘贴类定义的所有成员的情况下重用我的类声明?

declare type A {
a: string;
}

class A extends EventEmitter {

foo() {
this.a // error property not found
}
}

我认为流会识别 class A 是 type A 的实例,但它不会。

最佳答案

我认为你误解了 type 在 Flow 中的含义。

首先,在你的代码中有两个东西叫做A,它们是重叠的。让我们重命名它们,以便我们可以正确地讨论它们:

type T {
a: string;
}

这里,T 是任何具有名为 a 的属性的 Javascript 对象,该属性是一个字符串。

class C extends EventEmitter {
foo() {
this.a // error property not found
}
}

C 是您的类的名称,但 Flow 已经创建了一个同名的类型,它是作为 实例的所有对象的类型CC 的子类。 C 没有 a 属性,因此会出现错误。您不能将它变成 T,因为它不是 T。使它成为 T 的唯一方法是给它一个 a: number 属性:

class C extends EventEmitter {
a: number;
foo() {
this.a
}
}

现在 C 的任何实例也是 T 因为它符合 T 的接口(interface):

const t: T = new C(); // this is now ok

您最初的问题是关于避免属性重复。 Flow 不提供用于定义 classes 的额外快捷方式,但它确实提供了用于定义类型的快捷方式,通过 mixins .但是,我认为它不会完全按照您的意愿行事。您将能够执行以下操作:

declare class SharedProps {
a: number;
}
declare class A mixins SharedProps {
b: string;
}

但是,这只会声明类型,而不是实现。您仍然需要在某处实现这些类,这可能不会为您节省太多精力。

关于javascript - 为类定义重用流类声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41662696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com