2017-01-23 209 views
0

我正在爲我的項目測試FlowJS,並且我遇到了與Type Aliases有關的問題。FlowJS:類型繼承

我建一個網站的SDK的API:我有一個Helper類用這種方法:

class Helper { 
    find(filters:PaginationOptions = {}) { 
     // ... 
    } 
} 

PaginationOptions是一個基本FlowJS類型:

type PaginationOptions = { 
    start?:string, 
    end?:number, 
}; 

我也有用戶的幫手從Helper繼承:

class UsersHelper extends Helper { 
    find(filters:UsersFilterOptions = {}) { 
     // ... 
    } 
} 

UsersFilterOptions是FlowJS型「推」 PaginationOptions

type UsersFilterOptions = { 
    username?:string, 
    city?:string, 
} & PaginationOptions; 

我在這裏使用一個Intersection讓我的用戶過濾器也應該接受startend性能。

看來,我的IDE(PHPStorm)不從我UsersHelper類喜歡我find()方法,它總是告訴我說:

不兼容的覆蓋,應該有型 'PaginationOptions'

那麼......我知道,這就是爲什麼UsersFilterOptionsPaginationOptions有交集。

但FlowJS也表明了我兩個人警告:

流量:物業username。在對象字面上找不到屬性
流程:屬性city。物業在對象字面沒有發現

我不明白爲什麼我有這些錯誤:這些屬性被定義爲可選...

你有修復這些三個錯誤有什麼建議?

在此先感謝!

+0

@ nat-mote我可以知道爲什麼tag'flow-js'已被刪除?這個問題完全是關於'flow-js',對我來說這是一個非常不合理的想法,刪除這個標籤... – KorHosik

+0

看看這個標籤的描述,它是針對不同的流程類型檢查器的項目。標籤爲你想要的是flowtype:http://stackoverflow.com/tags/flow-js/info –

+0

好的,謝謝你的信息:) – KorHosik

回答

2

當你重寫一個方法,它的參數應該是在基類中相應的參數超類型,所以你可以這樣做:

class A { 
    test(x: number) { 
    } 
} 

class B extends A { 
    test(x: number | string) { 
    } 
} 

但你不能做到這一點:

class A { 
    test(x: number | string) { 
    } 
} 

class B extends A { 
    test(x: number) { 
    } 
} 
+0

謝謝你的回覆:)這種行爲在我看來很奇怪,但爲什麼不......任何想法如何解決我的問題,並使編譯器高興? – KorHosik