流程声明文件 - 入门

时间:2017-03-29 01:01:41

标签: flowtype

假设我在一个名为“math.js”的文件中有这个。

function double(n) {
  return n * 2;
}

exports.double = double;

如果我想在名为“math.js.flow”的单独文件中声明参数并返回“double”函数的类型,我会在该文件中放入什么?

3 个答案:

答案 0 :(得分:5)

您可以将其放在.js.flow文件中:

// @flow

declare export function double(n: number): number;

请注意,如果您的.js模块包含module.exports = function foo(),则需要执行以下操作:

declare function foo(): void;
declare module.exports: typeof foo;

您还可以使用.js.flow命令生成flow gen-flow-files个文件。在撰写本文时,它有问题但有时会失败,所以我仍然手动编写.js.flow文件,但如果成功,您可以查看它输出的内容,以反向工程.js.flow格式的更多方面。

答案 1 :(得分:0)

.js.flow文件被视为源文件。因此,对于您的示例,您可以执行以下操作:

function double(n: number): number {
  return n * 2;
}

exports.double = double;

但是,如果我确切地知道你想要实现的目标,我可能会提供更好的建议。通常,您只需要正确注释源文件。

答案 2 :(得分:0)

编辑:修复了代码和额外信息中的错误

math.js.flow

// @flow

declare module.exports: {
    double: (n: number) => number;
}

math.js

function double(n) {
  return n * 2;
}

exports.double = double;

index.js

const double = require('./math').double;

console.log(double(20));

这是一张图片,因此您可以看到文件夹布局/流程正常工作

Simple working example

要回答您对declare export function double(n: number): number;无效的原因的评论,请参阅thisthis

简而言之,declare export用于声明ES6模块的命名导出,例如export const foo = 'bar'。您的数学模块是CommonJs模块,因此您必须使用declare module.exports: ...语法