我有一些正在使用某些类静态函数处理的基本类型。另外,我有一个扩展类型,所以我想编写一个扩展类以与代码重用相同的方式对其进行处理。
代码可以找到,但是我无法在这里弄清楚如何使流程变得快乐。
这里有一个小的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);
}
}
答案 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
您可以说他对Data
和he'll be happy来说,只有SomeOtherClass
也可以:
static something(some: Data | ExtendedData): this {...}