为什么流在我的 .js.flow 文件中看不到 .random 属性

Why isn't flow seeing the .random property on my .js.flow file

我正在尝试使用没有流类型的第 3 方库。如果我从 sjcl.random.randomWords(2, 5) 开始,流程会告诉我找不到 random

sjcl.js.flow:

// @flow

declare module sjcl {
    declare type SjclType = {
        random: {
            randomWords: (nwords: number, paranoia: number) => Array<number>,
        }
    }

    declare module.exports: SjclType;
}

今天早上在 IRC 上与@asa-ayers 交谈并记录了后代的答案。

在此示例中,sjcl.js.flow 不是 lib 文件。它是位于 sjcl.js 旁边的文件。 Flow 看到 .flow 扩展,并在有人需要 sjcl.

时使用 sjcl.js.flow 的导出类型而不是 sjcl.js 的导出类型

任何非 lib 文件都可以声明它导出的类型。如果它想声明 CommonJS 导出,它可以使用语法 declare module.exports: Type。如果它想声明 ES6 导出,它可以使用语法 declare export.

所以对于有问题的例子,正确的语法如下:

/* @flow */

type SjclType = {
    random: {
        randomWords: (nwords: number, paranoia: number) => Array<number>,
    }
}

declare module.exports: SjclType;