2016-06-08 62 views
1

由於目前的語言限制,這可能是不可能的,但我使用最新的TS(1.8.10),並且遇到用戶界面類型問題。 IGridOptions上的isRowSelectable屬性被定義爲一個可選的布爾值,但文檔說它是一個函數(而且是)。我想重寫布爾屬性是一個返回布爾值的函數。如何覆蓋打字稿中的屬性?

通常情況下,我只是擴展打字界面,並做我需要的,但在這種情況下不起作用。下面是我有:

interface ISelectionGridOptions extends IGridOptions { 
    isRowSelectable: (row: IGridRowOf<Profile>) => boolean; 
} 

IGridOptions相關領域是:

export interface IGridOptions { 
    ... 
    isRowSelectable?: boolean 
    ... 
} 

而我得到的錯誤是:

(41,11): error TS2430: Interface 'ISelectionGridOptions' incorrectly extends interface 'IGridOptionsOf<any>'. 
    Types of property 'isRowSelectable' are incompatible. 
    Type '(row: IGridRowOf<Profile>) => boolean' is not assignable to type 'boolean'. 

固定芯分型定義的短,有沒有辦法在我的代碼中解決這個問題?

+1

如果接口聲明'isRowSelectable'是一個布爾值,那麼您不能用函數「覆蓋」它,因爲布爾值不可調用。 –

+0

好的,這是有道理的。如果您想回答這個問題作爲答案,我很樂意將其標記爲這樣。謝謝。 – icfantv

+0

爲了有點迂迴,它不會因爲布爾值不可調用而中斷,但像錯誤說的那樣,因爲函數不能分配給布爾值。函數peg無法適應布爾值,反之亦然。 –

回答

1

如果類型定義不正確,則不能使用覆蓋來修復它們 - 類型系統會將此視爲錯誤。在類型化語言中,阻止子類更改類型簽名是一件好事。這裏的問題是破碎的類型定義。如果這是不切合實際的解決閃避,並在你的代碼只有少數地方出現了問題,你可以使用強制轉換爲any禁用類型檢查,直到DEFS是固定的:

var foo = <boolean> (<any>bar).isRowSelectable(args); 
bar.isRowSelectable = <any>foo; 

就發表評論解釋這是怎麼回事。當然,最好修復類型defs。

+1

是的,我今天做了我的mitzvah並提交了PR:https://github.com/DefinitelyTyped/DefinitelyTyped/pull/9594 – icfantv