2017-01-07 32 views
1

我想用Flowdraft-js正確的方式來設置流稿與草稿-js

的package.json依賴

... 
"dependencies": { 
    "draft-js": "^0.9.1", 
    "immutable": "^3.8.1", 
    "react": "^15.4.2", 
    "react-dom": "^15.4.2" 
}, 
"devDependencies": { 
    "flow-bin": "^0.37.4" 
} 

我通過運行flow-typed install安裝了flow-typed類型定義。

這裏是我從draft-js文檔複製的一些稍微修改過的代碼,我試圖用流驗證。

index.js

// @flow 
import React from 'react'; 
import ReactDOM from 'react-dom'; 
import {Editor, EditorState} from 'draft-js'; 

class MyEditor extends React.Component { 
    state: { 
    editorState: EditorState 
    } 

    onChange: Function; 

    constructor(props) { 
    super(props); 
    this.state = {editorState: EditorState.createEmpty()}; 
    this.onChange = (editorState) => this.setState({editorState}); 

    // gives type error, as expcted 
    let a :string = 10; 

    const editorState :EditorState = this.state.editorState; 

    // should be a type error, editor.getCurrentContent() returns type ContentState 
    const content :string = editorState.getCurrentContent(); 
    } 

    render() { 
    return (
     <Editor editorState={this.state.editorState} onChange={this.onChange} /> 
    ); 
    } 
} 

ReactDOM.render(
    <MyEditor />, 
    document.getElementById('container') 
); 

.flowconfig

[ignore] 
.*\/node_modules\/draft-js\/lib\/.*.js.flow.* 

[include] 

[libs] 
.*\/node_modules\/draft-js\/lib\/.*.js.flow.* 

[options] 
esproposal.class_static_fields=enable 
suppress_type=$FlowIssue 
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue 

然而,當我運行flow命令,當我打電話API草案-JS我沒有得到任何錯誤。在這裏設置流程以用於草稿的正確方法是什麼?

回答

0

如果您忽略了.flowconfig中的文件,那麼[libs]也將忽略它們,因此您需要從[ignore]中刪除.*\/node_modules\/draft-js\/lib\/.*.js.flow.*

爲了獲得流動&草案-JS一起工作我還需要向suppress_comment設置爲草稿JS使用的值相同:

[options] 
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(2[0-8]\\|1[0-9]\\|[0-9]\\).[0-9]\\)? *\\).*\n 
0

之所以流量不draft-工作js導入時爲'draft-js'的是:

  • draft-js的主文件是lib/Draft.js。這意味着import {Editor} from 'draft-js'等於import {Editor} from 'draft-js/lib/Draft.js'
  • 從Flow版本0.19.0開始,它將以.flow(讀取爲this blog post)和draft-js 0.9.1具有lib/Draft.js.flow的文件結束。
    • 但是它沒有@flow聲明
  • (而你忽略了草案,JS在.flowconfig

,所以你可以通過添加@flownode_modules/draft-js/lib/Draft.js.flow簡要地解決這個問題。或分別從draft-js/lib/DraftEditor.reactdraft-js/lib/EditorState導入EditorEditorState