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