如何覆盖打字稿中的属性?

时间:2016-06-08 15:22:12

标签: typescript

由于目前的语言限制,这可能无法实现,但我使用的是最新的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'.

如果没有修复核心类型定义,有没有办法在我的代码中解决这个问题?

2 个答案:

答案 0 :(得分:4)

您可以使用实用程序类型Omithttps://www.typescriptlang.org/docs/handbook/utility-types.html#omittk

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

答案 1 :(得分:3)

如果类型定义不正确,则无法使用覆盖来修复它们 - 类型系统正确地将其视为错误。在类型化语言中,防止子类更改类型签名是一件好事。这里的问题是破碎的类型定义。如果修复def是不切实际的,并且只在代码中的几个地方出现问题,那么可以使用强制转换为$counter % 2 == 1来禁用类型检查,直到defs被修复为止:

any

只需发表评论即可解释正在发生的事情。当然,最好修复类型defs。

  

注意:它会像错误一样中断,因为函数不能赋予布尔值。函数peg无法适应布尔孔,反之亦然