flowjs 0.54.0中的新"缺失注释"错误

dob*_*ler 4 javascript node.js flowtype

切换到流量0.54.0后,以下代码片段:

function runKarmaTest() {
    const KARMA_CONFIG = {};
    return new Promise(function (resolve, reject) {
        new karma.Server(KARMA_CONFIG, function (exitCode) {
            if (exitCode === 0) {
                resolve();
            } else {
                reject(exitCode);
            }
        }).start();
    });
}
Run Code Online (Sandbox Code Playgroud)

报告以下错误:

Error: scripts/runKarma.js:76
               v----------------------------------------
 76:    return new Promise(function (resolve, reject) {
 77:            new karma.Server(KARMA_CONFIG, function (exitCode) {
 78:                    if (exitCode === 0) {
...:
 84:    });
        -^ type parameter `R` of constructor call. Missing annotation
Run Code Online (Sandbox Code Playgroud)

在线return new Promise(function (resolve, reject) {,我似乎无法弄清楚什么是错的?

Ada*_*dam 11

看起来它想要知道的是承诺包含的值的类型.在这种情况下,它看起来只是undefined,因为成功案例没有给出任何价值.您可以注释返回此函数的函数返回a Promise<void>或类似的东西,以使此错误消失.

奇怪的是,这发生在0.54而不是之前.

  • 新问题实际上不是"返回新的Promise(函数(resolve,reject){`由flow报告的行,而是在`function runKarmaTest()`定义本身中缺少的注释. (3认同)

dob*_*ler 7

函数中的Promise<void>注释runKarmaTest解决了这个问题:

function runKarmaTest(): Promise<void> {
    const KARMA_CONFIG = {};
    return new Promise(function (resolve, reject) {
        new karma.Server(KARMA_CONFIG, function (exitCode) {
            if (exitCode === 0) {
                resolve();
            } else {
                reject(exitCode);
            }
        }).start();
    });
}
Run Code Online (Sandbox Code Playgroud)

我还不确定:

  • 为什么在0.54而不是之前需要这个注释
  • 为什么流Type Inference不能从解决中的缺失参数中推断出来