DefinitelyTyped:为现有组件添加新的道具类型

时间:2017-04-24 13:03:21

标签: reactjs typescript material-ui typescript-typings definitelytyped

有没有办法在props内为新DefinitelyTyped声明新的输入?我使用material-ui组件中的一些新props更新了SelectField,但DefinitelyTyped中的输入已经过时了。我可以通过某种方式SelectField进行扩展并添加新的props类型吗?现在我有:

<SelectField
    multiple={true}
    hintText="Select type"
    value={[...this.state.values]}
    onChange={this.onChange}
    selectionRenderer={this.selectionRenderer}
>

我需要添加multiple?: booleanselectionRenderer: (values: any[]) => string类型。我尝试declare module 'material-ui/SelectField' {}但它不起作用。有任何想法吗?

2 个答案:

答案 0 :(得分:1)

您应该可以使用module augmentation

declare module "material-ui" {
    interface SelectFieldProps {
        multiple?: boolean;
        selectionRenderer: (values: any[]) => string;
    }
}

正如您所看到的,语法与您尝试过的语法略有不同。

修改

如果在SelectFieldProps命名空间中定义__MaterialUI,那么这应该有效:

declare module "material-ui" {
    namepsace __MaterialUI {
        interface SelectFieldProps {
            multiple?: boolean;
            selectionRenderer: (values: any[]) => string;
        }
    }
}

答案 1 :(得分:0)

好的,我找到了解决方案,@ Nitzan回答没关系,但需要一些改进。当我查看node_modules/@types/material-ui/index.d.ts时,我发现在interface SelectFieldProps中定义namespace __MaterialUI,所以我必须这样写:

declare namespace __MaterialUI {
  interface SelectFieldProps {
    multiple?: boolean;
    selectionRenderer?: (values: any[]) => string;
  }
}

它适用于./src/typings/selectfield.d.ts,如果我在使用<SelectField />的同一文件中声明它(可能是因为.d.ts扩展名)