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

时间:2016-08-11 14:29:45

标签: flowtype

我正在尝试使用没有流类型的第三方库。如果我从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;
}

1 个答案:

答案 0 :(得分:2)

今天早上在IRC上向@ asa-ayers发表讲话&amp;记录下属的答案。

在此示例中,sjcl.js.flow不是lib文件。它是一个位于sjcl.js旁边的文件。 Flow会看到.flow扩展名,并在有人需要sjcl.js.flow时使用导出的sjcl.js类型而不是导出的sjcl类型。

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

因此,例如,正确的语法如下:

/* @flow */

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

declare module.exports: SjclType;