2016-06-08 2 views
1

Это может быть невозможно из-за существующих языковых ограничений, но я использую новейшие TS (1.8.10), и я столкнулся с проблемой с пиктограммами ui-grid. Свойство isRowSelectable на IGridOptions определено как необязательное логическое значение, но в документации говорится, что это функция (и она есть). Я пытаюсь переопределить свойство boolean как функцию, возвращающую логическое значение.Как переопределить свойство в машинописном тексте?

Как правило, я просто расширяю интерфейс ввода и выполняю то, что мне нужно, но это не работает в этом случае. Вот что у меня есть:

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' логическим, то вы не можете« переопределить »его с помощью функции, потому что boolean не является вызываемым. –

+0

ОК, это имеет смысл. если вы хотите ответить этим ответом, я рад отметить его как таковой. Благодарю. – icfantv

+0

Чтобы быть немного педантичным, он ломается не потому, что логическое значение не вызывается, но, как говорит ошибка, потому что функция не может быть привязана к логическому. Функция привязки не вписывается в булево отверстие, а не наоборот. –

ответ

1

Если определения типов неверны, вы не можете использовать переопределение для их исправления - система типов правильно рассматривает это как ошибку. На типизированном языке хорошо, что подклассам запрещено изменять сигнатуры типов. Проблема здесь заключается в определении сломанного типа. Если это не практично, чтобы исправить размораживание, и проблема возникает только в нескольких местах в вашем коде, вы можете использовать приведение к any отключить проверки типов, пока DEFS не фиксированы:

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

Просто оставьте комментарий объясняя что происходит. Конечно, лучше всего исправить тип def.

+1

Да, я сделал свою мицву на сегодня и представил PR: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/9594 – icfantv

Смежные вопросы