【发布时间】:2018-07-24 02:45:38
【问题描述】:
我正在使用 React victory 库来制作图表,并且我正在使用 TypeScript。我已将 @types/victory 包添加到我的项目中,但不幸的是,它缺少一堆我需要的 key 定义。对于某些接口,它缺少几个属性,因此(使用this answer),我创建了一个自定义文件来将这些属性添加到接口。
但是,现在我有一个问题:为事件定义的接口定义了一个名为eventHandlers 的属性,但它又缺少一个重要的定义,它是如何定义的:
export interface EventPropTypeInterface<TTarget, TEventKey> {
/* other properties */,
eventHandlers: {
[key: string]:
{ (event: React.SyntheticEvent<any>): EventCallbackInterface<TTarget, TEventKey> } |
{ (event: React.SyntheticEvent<any>): EventCallbackInterface<TTarget, TEventKey>[] }
}
但是,问题是函数应该允许接受第二个参数,例如(我不确定第二个参数的类型,所以我有any):
{ (event: React.SyntheticEvent<any>, dataPoint: any): EventCallbackInterface<TTarget, TEventKey> }
所以,我尝试将这个属性包含在我自己的定义中:
declare module "victory" {
export interface EventPropTypeInterface<TTarget, TEventKey> {
eventHandlers: {
[key: string]:
{ (event: React.SyntheticEvent<any>, dataPoint: any): EventCallbackInterface<TTarget, TEventKey> } |
{ (event: React.SyntheticEvent<any>, dataPoint: any): EventCallbackInterface<TTarget, TEventKey>[] }
}
}
但是现在,TypeScript 在抱怨@typings 目录下的index.d.ts,说eventHandlers 必须是我定义的类型。
有没有办法使用提供的类型定义文件,并以某种方式用我自己的定义“增强”它,类似于我在添加新属性时对其他接口所做的那样?
【问题讨论】:
-
几天前我问了一个类似的问题,答案的要点是“无法重新定义定义文件中的属性”:stackoverflow.com/a/48692419/1063392。但如果这是不正确的,我会很高兴!
-
它是否只是 allow 另一个参数而不是 require 一个?如果是这样,也许将其更改为可选,例如
dataPoint?: any而不是dataPoint: any。 -
@jcalz 我也有同样的想法,不幸的是,它似乎根本不起作用。
标签: reactjs typescript typescript-typings victory-charts