由于目前的语言限制,这可能无法实现,但我使用的是最新的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'.
如果没有修复核心类型定义,有没有办法在我的代码中解决这个问题?
答案 0 :(得分:4)
您可以使用实用程序类型Omit
:
https://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无法适应布尔孔,反之亦然