首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向类类型的并集中添加静态变量

向类类型的并集中添加静态变量
EN

Stack Overflow用户
提问于 2018-09-26 00:50:44
回答 1查看 155关注 0票数 2

我试图表示类型“Base1Base2__的一个子类,并添加一个静态属性foo: string__”。

我尝试了以下方法,但是我得到了一个错误:

(link.org/try链接)

代码语言:javascript
运行
复制
// @flow

class Base1 { }
class Base2 { }

class Foo extends Base1 {
  static foo = "hi"
}

type IBase = Class<Base1> | Class<Base2>;

type IFoo = IBase & {+foo: string}

(Foo: IFoo);  // no error

function getFoo(): IFoo {
  return Foo;  // no error
}

(getFoo(): IFoo);  // error

无法将getFoo()转换为IFoo,原因是:Base2 1与Base1 2不兼容,或对象类型3与Base1 4的静力学不兼容,或Base1 2与Base2 1不兼容,或对象3与Base2 5的静力学不兼容。

我可以通过删除& {+foo: string}或删除| Class<Base2>来修复错误,但这两者都是我想要表示的类型的关键要求。

问题的症结似乎是“对象类型与的静力学不兼容”。有什么不同的技术可以用来添加静态属性吗?

EN

回答 1

Stack Overflow用户

发布于 2018-10-18 21:55:05

不理解这里的逻辑,但这似乎是出于某种原因:

代码语言:javascript
运行
复制
type IFoo = IBase & {+foo: string};
type IFoo2 = Class<Base1> & {+foo: string} | Class<Base2> & {+foo: string};

(Foo: IFoo);  // no error

function getFoo(): IFoo2 {  // change return type to IFoo2
  return Foo;  // no error
}


(getFoo(): IFoo);  // huh?
(getFoo(): IFoo2);

链接

在过去,我有过类似的问题,使用交交类型和联合类型的交集,通常只是尝试其中一种或另一种,直到它起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52508434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档