将流类型注释提取到外部文件中

时间:2017-08-20 20:34:15

标签: javascript ecmascript-6 flowtype flow-typed

我想从源代码中删除Flow的详细程度。有没有办法在单独的文件中声明类型?

这就是我所拥有的:

// @flow
// src/writer.js
class Writer {
  write(text: string):string {
    return `I wrote ${text}`
  }
}

这就是我想要实现的目标:

// @flow
// src/writer.js
class Writer {
  write(text) {
    return `I wrote ${text}`
  }
}

// src/definitions/writer.js.flow
declare class Writer {
  write(text: string):string
}

我尝试将writer.js.flow放在flow-typed文件夹中,我也尝试声明IWriter Writer扩展的func Login(w http.ResponseWriter, r *http.Request) { fmt.Println("Login prccessing") email := r.FormValue("email") password := r.FormValue("password") fmt.Println(email + password) var netTransport = &http.Transport{ Dial: (&net.Dialer{ Timeout: 50 * time.Second, }).Dial, TLSHandshakeTimeout: 50 * time.Second, } var netClient = &http.Client{ Timeout: time.Second * 50, Transport: netTransport, } res, err := netClient.Get("https://account.sloppy.zone/accounts/" + email) if err != nil { fmt.Println(err.Error()) http.Redirect(w, r, "/", http.StatusSeeOther) } responeData, errs := ioutil.ReadAll(res.Body) fmt.Println(string(responeData)) if errs != nil { log.Fatal(errs) } var info LoginInfo json.Unmarshal(responeData, &info) if email == info.Id && password == info.Password { http.Redirect(w, r, "/manager", http.StatusSeeOther) } else { http.Redirect(w, r, "/", http.StatusSeeOther) } } 接口。 Flow并不喜欢它。

我不确定这是否可能,因为函数可以声明自己的变量,也应该正确注释。

1 个答案:

答案 0 :(得分:3)

没有办法在Flow中完全按照自己的意愿行事。有一些支持的特定用例:

  • 如果您有一些非Flo​​w代码(可能是库)和一些Flow应用程序代码,并且您希望Flow代码可以使用非Flow代码但是知道涉及哪些类型,您可以为无类型代码编写"library definition"。重要的是要理解这个库定义没有针对实现代码进行检查,它只是假设是真的,所以你必须小心编写libdef。

  • 如果您有Flow代码并且想要在没有Flow注释的情况下阅读或运行它,则可以使用flow-remove-types从文件中删除Flow语法。

但我认为你还想要别的东西。听起来你想要编写没有Flow注释的代码,然后在另一个文件中编写注释,但让Flow检查注释代码。这不是Flow目前支持的。

(顺便说一句,它也不是我希望他们会添加的东西。类型的主要好处是在阅读,编写和思考代码时提供帮助.Flow有很好的推理,所以总体来说你不喜欢#39; t必须写出那么多类型。但你所做的那些(如在导出的函数中)通常有助于思考代码。)