重写静态函数扩展类型参数的流类型检查

时间:2018-11-23 16:17:06

标签: javascript flowtype

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

代码可以找到,但是我无法在这里弄清楚如何使流程变得快乐。

这里有一个小的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);
    }
}

1 个答案:

答案 0 :(得分:0)

点流抱怨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

您可以说他对Datahe'll be happy来说,只有SomeOtherClass也可以:

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