如何使用正确的流类型扩展 JavaScript 中的错误

How to extend an Error in JavaScript with the correct flowtypes

我正在尝试创建一个自定义错误,它使用正确的流类型 Error 扩展

我正在尝试做的事情的例子:

export class ValidationError extends Error {
  /**
   * @constructor
   * @param {string} message - Error message
   * @param {object} inputData - Data that was validated
   * @param {object} invalidProperties - Specific properties of `inputData` that are invalid
   * @param {object[]} reasons - Reason the `inputData` is invalid
   */
  constructor(message, inputData, invalidProperties, reasons) {
    super()
    this.id = ''
    this.name = 'ValidationError'
    this.message = message
    this.inputData = inputData
    this.invalidProperties = invalidProperties
    this.reasons = reasons
  }
}

类型:

  /**
   * @constructor
   * @param {string} message - Error message
   * @param {object} inputData - Data that was validated
   * @param {object} invalidProperties - Specific properties of `inputData` that are invalid
   * @param {object[]} reasons - Reason the `inputData` is invalid
   */
  constructor(
    message: string,
    inputData: {...},
    invalidProperties: {...},
    reasons: Array<{...}>
  ) {
    super()
    this.id = ''
    this.name = 'ValidationError'
    this.message = message
    this.inputData = inputData
    this.invalidProperties = invalidProperties
    this.reasons = reasons
  }
}

(在 tryFlow 中: https://flow.org/try/#0KYDwDg9gTgLgBAYwDYEMDOa4DUVIJYAmKMeEAdgKJRTRygzBkGZU1RwDeAUHHAPQAqAT14C4AAQTk0MKAFcEMaCLhjxYFFBQBbTjKh4yAcwC+cbcAwojwOAFo4rWhas2VajVt0cIAIwBWwIpmhmByMAAixCj2cFEwMTAAFsRwAO7ocABuuITEwATuEp46nH6BwXCGOfgEAAo0YMCweJaxAMpNCHgAZngIcGCNzSRtED1wAAah4fEok3DJqZq21bmFvKrFmqU+AUEwANoAumZQwOjSsQBKF2jki0m202RhkdELeJhrte58IlIyPoFEooAAKFTmSxoazAABccH0hiMABpITN3gkERwAHR4kxozZVMg1QgNCBNFqWbF4nEEyHnS5AhEAQWoKAAngAeXH4gB8IgAlJxIWg5JSwYLIckvjjCHAALxwADkyulSVlZB0tiVypwtWIpEo1GgaqJMrQOJcMJsiqhrmA6tlGLmdpd0Sdlp+ZOGVMwSu99V9ozQnpxjPuQLtEekIhMXBMQA)

但是流程抱怨额外的属性(idinputData 等)。我尝试使用界面,但流程不喜欢 类 和 implement 以及 extend.

有人成功过吗?

提前致谢,

您需要在分配给它们之前声明这些属性存在,例如

export class ValidationError extends Error {
  id: string;
  inputData: { ... };
  invalidProperties: { ... };
  reasons: Array<{ ... }>;

  // ...