为npm反应模块定义打字稿的打字

时间:2016-10-09 07:00:31

标签: reactjs typescript typescript-typings

我正在尝试定义反应模块react-input-autosize的类型,以便在打字稿项目中使用。该模块没有现成的打字。

我向react-input-autosize添加了一个目录typings/modules。 然后我将文件index.d.ts添加到新目录中。 我填写了新文件,理解了导入模块的结构(由打字稿编译器接受):

/// <reference path="../../globals/react/index.d.ts" />
/// <reference path="../../globals/react-dom/index.d.ts" />

declare module 'react-input-autosize' {
  import * as React from "react"
  import * as ReactDOM from "react-dom"

  export interface AutosizeInputProps extends React.Props<any>{
      className?: string,     
      defaultValue?: any,     
      inputClassName?: string,
      inputStyle?: any, 
      minWidth?: number,
      onKeyDown?: (x:any) => void,
      onChange?: (x:any) => void,
      placeholder?: string,
      placeholderIsMinWidth?: boolean,
      style?: any,  
      value?: string,
      readOnly?: boolean,
      autoFocus?: boolean,
      type?: string
    }

  export class AutosizeInput extends React.Component<AutosizeInputProps, any> {
      constructor(props? : AutosizeInputProps, context? : any);

      greeting: string;
      showGreeting(): void;
  }

  export default AutosizeInput;
}

此时导入项目中的模块开始成功,因为我没有得到“模块未找到”错误:

import AutosizeInput from 'react-input-autosize';

遗憾的是,实例化AutosizeInput类现在在运行时不起作用,因为AutosizeInput结果未定义。

在同一项目中的非打字稿文件中,import AutosizeInput from 'react-input-autosize';仍然有效,因此在无类型时从npm正确导入模块。

1 个答案:

答案 0 :(得分:0)

default导入:

import AutosizeInput from 'react-input-autosize';

将尝试导入default导出。但模块react-input-autosize没有默认导出。你可以尝试:

import * as AutosizeInput from 'react-input-autosize';

从导出中删除default

export = AutosizeInput;

希望它有所帮助。