2017-08-20 41 views
1

我想从我的源代码中去除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.flowflow-typed文件夹,我也尝试宣告IWriter接口那Writer会延长。 Flow不喜欢它。

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

+0

我想你会把'.js.flow'文件放在同一个文件夹中'.js'文件? – loganfsmyth

+0

@loganfsmyth它不起作用 –

+0

再看一遍,你是否试图对给定文件的导出类进行类型检查? Flow的'.js.flow'文件适用于在模块边界暴露的类型,但是它们在实现该逻辑的文件内并不会有任何效果。我并不完全确定,我理解你在这种情况下将事情分开的动机。不必重复所有的功能,这使得_more_冗长? – loganfsmyth

回答

2

没有一种方法可以在Flow中完成您想要的功能。但是也有一些支持几个特定用例:

  • 如果你有一些不流动的代码(譬如图书馆)和一些流应用程序代码,您希望它的流量代码可能要使用非流程代码但知道涉及哪些类型,可以为无类型代码编写"library definition"。理解这个库的定义不是针对实现代码进行检查是很重要的,它只是假定是真的,所以你必须小心编写libdefs。

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

但我想你想要别的东西。这听起来像你想要在没有Flow注释的情况下编写代码,然后将注释写入另一个文件中,但是Flow会根据代码检查注释。这不是Flow目前支持的内容。 (从另一方面来说,它也不是我期望他们会添加的东西,类型的主要好处是在阅读,编写和思考代码时有所帮助,Flow有很好的推理,所以总体上你没有写出那么多类型,但是你做的那些(如在导出的函数中)通常有助于思考代码。)