【问题标题】:Flow type checking for overriden static function extended type argument覆盖静态函数扩展类型参数的流类型检查
【发布时间】:2018-11-26 02:44:31
【问题描述】:

我有一些基本类型正在使用一些类静态函数进行处理。另外我有一个扩展类型,所以我想编写一个扩展类,以与代码重用相同的方式处理它。

代码可以找到,但我不知道如何在这里让流程快乐。

这是一个小example

// @flow

type Data = {
  id: number 
}

type ExtendedData = Data & {
  name: string 
}

class SomeClass {
    static something(some: Data): this {
        return new this(); // returns SomeClass
    }
}

class SomeOtherClass extends SomeClass {
    // flow: Cannot extend `SomeClass` [1] with `SomeOtherClass` 
    // because property `name` is missing in `Data` [2] but exists in 
    // object type [3] in the first argument of property `something`.
    static something(some: ExtendedData): this {
        return /* returns SomeOtherClass here */ super.something(some);
    }
}

【问题讨论】:

    标签: javascript flowtype


    【解决方案1】:

    点流抱怨is similar to this one,您的实现在SOLID 中中断了L,即在下一种情况下它将失败:

    const f = (S: Class<SomeClass>) => {
       S.something({id: 1}) 
    }
    f(SomeClass); // ok
    f(SomeOtherClass); // fail, no name property
    

    你可以说他只有Data也可以,SomeOtherClasshe'll be happy

    static something(some: Data | ExtendedData): this {...}
    

    【讨论】:

    • @silent,好吧,为你找到了更简单的东西
    猜你喜欢
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 2018-06-30
    • 2012-11-09
    • 2012-11-26
    相关资源
    最近更新 更多