【问题标题】:How to make the following code work with flow js annotations? Using Object.create()如何使以下代码与流 js 注释一起使用?使用 Object.create()
【发布时间】:2017-06-18 03:46:15
【问题描述】:

请检查:https://flow.org/try/#0PQKgBAAgZgNg9gdzCYAoVBjGBDAzrsAQTAG9UwwBzAUwBcws4A7agCgEoAuMWgCwEsCZChQBOdAK6imYAPIAjAFbUMtAHR5c-Sk1YLlqtRnHZabPoPYAaHgNztyYAL6oXmHPjAAhMNQAeZkwAJgTEJG4AbtiiYPJgALxgLEheHADcqFExGAmxRvAsqEA

在以下代码中,我的clone 调用出现错误:

/* @flow */

class A {
  get clone(): this {
     return Object.assign(Object.create(this), this)
  }
}

class B extends A {}

var b = new B();
var c = b.clone

我收到一个错误:协变属性 clone 与调用方法 assign 时的逆变使用不兼容。

如何注释这个,请纠正我的例子。

【问题讨论】:

  • 你真正想要的是Object.assign(Object.create(Object.getPrototypeOf(this)), this)
  • 谢谢,但我得到 flowtype 错误:此类型与 this 的预期返回类型不兼容。 See Code example here

标签: javascript flowtype es6-class


【解决方案1】:

我现在让它工作了(通过强制转换为任何):

/* @flow */

class A {
  get clone(): this {
     return Object.assign((Object.create(this): any), this)
  }
}

class B extends A {}

var b = new B()
var c = b.clone

【讨论】:

    猜你喜欢
    • 2020-05-14
    • 2017-06-01
    • 2018-09-26
    • 2011-06-19
    • 2019-11-28
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多