2016-10-09 28 views
2

我正在嘗試定義反應模塊的類型,react-input-autosize,用於打字稿項目。該模塊沒有現成的類型。定義類型描述npm反應模塊

我添加了一個目錄react-input-autosizetypings/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正確導入。

回答

0

default進口:

import AutosizeInput from 'react-input-autosize'; 

會嘗試導入default出口。但模塊react-input-autosize沒有默認導出。你可以嘗試用:

import * as AutosizeInput from 'react-input-autosize'; 
從出口

和刪除default

export = AutosizeInput; 

希望它能幫助。

+0

根據你的建議,我得到錯誤TS2497:模塊'react-input-autosize''解析爲非模塊實體,無法使用此構造導入。 –

+0

如果我將'AutosizeInput'類標記爲'export default',那麼編譯器不會抱怨,但我不能在類中實例化這個類,因爲這個符號顯然是空的。這意味着無論什麼原因,我都可以使類型工作,但是然後導入不會在運行時加載類... –